The Differences between Little-Endian and Big-Endian

来源:互联网 发布:c语言怎么判断素数思路 编辑:程序博客网 时间:2024/05/19 10:41

    在网络编程以及跨平台编程里面经常会提到Little-EndianBig-Endian的概念,本文就此内容做个总结。 2010-3-13   wcdj 参考资料:http://bbs.chinaunix.net/viewthread.php?tid=823662#  

 

Little-EndianBig-Endian是表示计算机字节顺序的两种格式,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式
      
假设从地址0x00 00 00 00开始的一个字(4个字节)中保存有数据0x1234abcd(十六进制),那么在两种不同的内存顺序的机器上从字节的角度去看的话分别表示为:

1) Little-Endian在内存中的存放顺序是:

0x00000000-0xcd   (低字节放在低位)

0x00000001-0xab

0x00000002-0x34

0x00000003-0x12
      2) Big-Endian
在内存中的存放顺序是:

0x00000000-0x12

0x00000001-0x34

0x00000002-0xab

0x00000003-0xcd   (低字节放在高位)
      
需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的。

      
简单的说,Little-Endian把低字节存放在内存的低位;而Big-Endian将低字节存放在内存的高位
      
现在主流的CPUintel系列的是采用的Little-Endian的格式存放数据,而motorola系列的CPU采用的是Big-Endian

 

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

在网络编程中,TCP/IP统一采用Big-Endian方式传送数据,也就是说,假设现在是在一个字节顺序是Little-Endian的机器上传送数据,要求传送的数据是0X12345678,那么你就要以0X78563412的顺序在unsigned int中存放这个数据,只有这样才能保证存放的顺序满足TCP/IP的字节顺序要求。很多时候,需要自己编写应用层的协议,字节顺序的概念在这个时候就显得及其重要了。

下面给出的是在Little-EndianBig-Endian中相互转换的代码,C语言强大的位操作的能力在这里显示了出来:

 

更详细的资料如下:


原创粉丝点击