Big Endian 和 Little Endian
来源:互联网 发布:乐汀私人影院数据 编辑:程序博客网 时间:2024/06/16 06:35
谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian呢?
其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。用文字说明可能比较抽象,下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:
Big Endian
低地址 高地址
-------------------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 12 | 34 | 56 | 78 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian
低地址 高地址
------------------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 78 | 56 | 34 | 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
从上面两图可以看出,采用big endian方式存储数据是符合我们人类的思维习惯的。而little endian,!@#$%^&*,见鬼去吧 -_-|||
无独有偶,所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。
一个例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
Address big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x34 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
目前应该little endian是主流,因为在数据类型转换的时候(尤其是指针转换)不用考虑地址问题。例如长度为1,2,4字节的数,排列方式都是一样的,数据类型转换非常方便。
- Big-endian和Little-endian
- Big-endian和Little-endian
- Big Endian 和 Little Endian
- Big-endian和Little-endian
- little endian和big endian
- Big Endian 和 Little Endian
- Big Endian和Little Endian
- Big Endian 和 Little Endian
- Big Endian和Little Endian
- Big-endian和Little-endian
- Big Endian和Little Endian
- big-endian和little-endian
- Big Endian 和 Little Endian
- little endian和big endian
- big endian和little endian
- little endian和big endian
- Big Endian 和 Little Endian
- little endian和big endian
- 关于通过vmware安装windows8的几个问题及解决--无人参与应答文件包含的产品密钥无效
- 用profiler工具对android ndk程序进行性能分析
- JSP中文乱码问题终极解决方案
- Qt调用DLL动态库接口函数程序崩掉
- Deepflow 初步架构
- Big Endian 和 Little Endian
- linux以tree树状图逐级列出目录的内容
- oracle数据库误删恢复方法
- Qt多线程两种方式优劣,继承QThread还是MoveToThread
- 每天一个linux命令
- CentOS 6.5安装JDK6.0
- Zigbee地址分配(转)
- Servlet 中文乱码问题及解决方案剖析
- MYbatis 多参数传递方式