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

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值