The Differences between Little-Endian and Big-Endian

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

 

Little-Endian Big-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 将低字节存放在内存的高位
      
现在主流的 CPU intel 系列的是采用的 Little-Endian 的格式存放数据,而 motorola 系列的 CPU 采用的是 Big-Endian

 

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

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

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

 

更详细的资料如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值