4.9、字节序
- 1.简介
- 2.字节序举例
- 3.判断电脑存储方式代码
1.简介
现代
CPU
的累加器一次都能装载(至少)4 字节
(这里考虑32 位机
),即一个整数。那么这4字节
在内存中排列的顺序将影响它被累加器装载成的整数的值,这就是字节序问题。在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编码/译码从而导致通信失败。
字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。
字节序分为大端字节序(Big-Endian)
和小端字节序(Little-Endian)
。大端字节序是指一个整数的最高位字节(23 ~ 31 bit)
存储在内存的低地址处,低位字节(0 ~ 7 bit)
存储在内存的高地址处;小端字节序则是指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。
2.字节序举例
- 小端字节序
0x 01 02 03 04
内存的方向 ----->
内存的低位 -----> 内存的高位
04 03 02 01
- 读取结果:0x 11 22 33 44 12 34 56 78
- 大端字节序
0x 01 02 03 04
内存的方向 ----->
内存的低位 -----> 内存的高位
01 02 03 04
- 读取结果:0x 12 34 56 78 11 22 33 44
3.判断电脑存储方式代码
#include <iostream>
using namespace std;
int main()
{
union Node
{
short value;
char str[sizeof(value)];
};
Node test;
test.value = 0x0102;
if (test.str[0] == 1 && test.str[1] == 2)
{
cout << "大端" << endl;
}
else if (test.str[0] == 2 && test.str[1] == 1)
{
cout << "小端" << endl;
}
return 0;
}