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

判断计算机字节存储顺序的方法(Big-endian或Little-endian)

2019年03月17日 ⁄ 综合 ⁄ 共 1399字 ⁄ 字号 评论关闭

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. 

 

首先,明确几个概念

1、字节:固定为8位二进制

2、字长:字为计算机一次能处理的数据长度

                   8位机中为8位二进制 即1个字节

                  16位机中为16位二进制 即2个字节

                    32位机中为32位二进制 即4个字节

3、char类型长度:固定为一个字节,即8位二进制

4、int类型长度:固定为一个字长

实例如下:环境为32位机

int i=1;

Big-endian方式下:   0x00            0x00             0x00             0x01

Little-endian方式下:0x01            0x00             0x00             0x00

地址:                       1000            1001            1002             1003

获取i的地址,为1000处   &i  

强制转换指针类型为char * ,即从地址起点截断1个字节       (char*)&i

此时

Big-endian方式下为:0x00

Little-endian方式下为:0x01

得出如下结论

int i=1;

若*(char*)&i等于1 则为Little-endian方式,否则为Big-endian方式

 

采用Little-Endian的

操作系统 FreeBSD,Linux,Windows

x86的机器

采Big-Endian的

操作系统
MAC OS

ARM, Alpha,摩托罗拉的PowerPC

Network中的变量

Java语言.

 

 

 

 

bool IsBig_Endian()

//如果字节序为big-endian,返回true;

//反之为   little-endian,返回false

{

    unsigned short test = 0x1122;

    if(*( (unsigned char*) &test ) == 0x11)

       return TRUE;

else

    return FALSE;

}//IsBig_Endian()

抱歉!评论已关闭.