C/C++之大端模式和小端模式
2018-02-18 11:47
232 查看
Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering或Byte Order。对于数据中跨越多个字节的对象, 我们必须为它建立这样的约定:
(1) 它的地址是多少?
(2) 它的字节在内存中是如何组织的?
对于跨越多个字节的对象,一般它所占的字节都是连续的,它的地址等于它所占字节最低地址。(链表可能是个例外, 但链表的地址可看作链表头的地址)。比如: int x,它的地址为0×100。那么它占据了内存中的0x100, 0×101, 0×102, 0×103这四个字节(32位系统,int占用4个字节)。
上面只是内存字节组织的一种情况,多字节对象在内存中的组织一般有两种约定。 例如一个W位的整数,它的各位表达如下:[Xw-1, Xw-2, ... , X1, X0],它的MSB(Most Significant Byte)为 [Xw-1, Xw-2, ... Xw-8];LSB (Least Significant Byte)为 [X7,X6,..., X0]。LSB和MSB谁位于内存的最低地址,即谁代表该对象的地址,这就引出了大端(Big Endian)与小端(Little Endian)的问题
32位宽的数0x12345678在小端模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
而在大端模式CPU内存中的存放方式则为:
首先我们要知道一点,内存地址是从小到大顺序增长的。因此,如果定义一个变量,变量的地址就是0x4000。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。下面通过程序判断大小端
联合体测试大端小端
使用指针强制转换
(1) 它的地址是多少?
(2) 它的字节在内存中是如何组织的?
对于跨越多个字节的对象,一般它所占的字节都是连续的,它的地址等于它所占字节最低地址。(链表可能是个例外, 但链表的地址可看作链表头的地址)。比如: int x,它的地址为0×100。那么它占据了内存中的0x100, 0×101, 0×102, 0×103这四个字节(32位系统,int占用4个字节)。
上面只是内存字节组织的一种情况,多字节对象在内存中的组织一般有两种约定。 例如一个W位的整数,它的各位表达如下:[Xw-1, Xw-2, ... , X1, X0],它的MSB(Most Significant Byte)为 [Xw-1, Xw-2, ... Xw-8];LSB (Least Significant Byte)为 [X7,X6,..., X0]。LSB和MSB谁位于内存的最低地址,即谁代表该对象的地址,这就引出了大端(Big Endian)与小端(Little Endian)的问题
32位宽的数0x12345678在小端模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:
内存地址 | 0x4000 | 0x4001 | 0x4002 | 0x4003 |
存放内容 | 0x78 | 0x56 | 0x34 | 0x12 |
内存地址 | 0x4000 | 0x4001 | 0x4002 | 0x4003 |
存放内容 | 0x12 | 0x34 | 0x56 | 0x78 |
联合体测试大端小端
使用指针强制转换
相关文章推荐
- C++大端模式和小端模式
- c\c++ 复习基础要点07---内存存储 大端模式、小端模式
- C/C++ 工具函数 —— 大端模式和小端模式的互换
- 【C/C++开发】内存对齐(内存中的数据对齐)、大端模式及小端模式
- 详解大端模式和小端模式
- 大端模式与小端模式
- 如何判断当前环境的存储方式是大端模式还是小端模式?
- 详解大端模式和小端模式
- 大端模式和小端模式
- 大端模式和小端模式[转]
- C++ 判断是大端存储还是小端存储
- 理解字节序:大端模式、小端模式
- 大端模式与小端模式、网络字节顺序与主机字节顺序
- 详解大端模式和小端模式
- 浅析大端模式和小端模式
- 如何判断CPU是大端还是小端模式
- 大端模式和小端模式
- 大端模式和小端模式
- 20131213-详解大端模式和小端模式 .
- 大端模式和小端模式