The Differences between Little-Endian and Big-Endian
来源:互联网 发布:c语言怎么判断素数思路 编辑:程序博客网 时间:2024/05/19 10:41
在网络编程以及跨平台编程里面经常会提到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语言强大的位操作的能力在这里显示了出来:
更详细的资料如下:
- The Differences between Little-Endian and Big-Endian
- what is the difference between little-endian and big-endian.
- Difference between big-endian and little-endian
- Big-endian and Little-endian
- big endian and little endian
- little-endian and big-endian
- Big endian and little endian
- Little-Endian and Big-Endian
- Big endian and Little endian
- Big Endian and Little Endian
- big endian and little endian
- Big endian and little endian
- Big endian and Little endian
- Big endian and Little endian
- little endian and big endian
- big endian and little endian
- Big endian and Little endian
- Big Endian and Little Endian
- “云” 随想
- ECMA 推出 JavaScript 5
- 看概论,查标准文档
- 海量数据查询优化技巧
- C#仿QQ皮肤系列之-引言
- The Differences between Little-Endian and Big-Endian
- 类库和框架区别
- 毕业后五年决定了你的一生
- BIG5编码范围
- 我也来写写数学黑洞
- c文件操作 (转)
- 十大经典英文句子
- 使用CascadingDropDown实现级联式下拉框
- Linux内核中的双循环链表