现在的位置: 首页 > 综合 > 正文

试编写函数判断计算机的字节存储顺序是开序(little endian)还是降序(bigendian)

2017年12月04日 ⁄ 综合 ⁄ 共 958字 ⁄ 字号 评论关闭

little   endian和big   endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式.
                假设从地址0x00000000开始的一个字中保存有数据0x1234abcd,那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为:
              1)little   endian:在内存中的存放顺序是0x00000000-0xcd,0x00000001-0xab,0x00000002-0x34,0x00000003-0x12
              2)big     endian:在内存中的存放顺序是0x00000000-0x12,0x00000001-0x34,0x00000002-0xab,0x00000003-0xcd
              需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的.
              简单的说,ittle   endian把低字节存放在内存的低位;而big   endian将低字节存放在内存的高位.
              现在主流的CPU,intel系列的是采用的little   endian的格式存放数据,而motorola系列的CPU采用的是big   endian. 
             

 以下是判断字节存储顺序的可移植的C语言代码:

#include   <stdio.h>

union

{

long   Long;

char   Char[sizeof(long)];

}u;

int   main()

{

u.Long   =   1;

if   (u.Char[0]   ==   1)

{

printf( "Little   Endian!/n ");

}

else   if   (u.Char[sizeof(long)   -   1]   ==   1)

{

printf( "Big   Endian!/n ");

}

else

{

printf( "Unknown   Addressing!/n ");

}

        printf( "Now,   Let 's   look   at   every   byte   in   the   memory!/n ");

        for   (int   i   =   0;   i   <   sizeof(long);   ++i)

        {

                printf( "[%x]   =   %x/n ",   &u.Char,   u.Char);

        }

return   0;

}

抱歉!评论已关闭.