> 文章列表 > 4.9、字节序

4.9、字节序

4.9、字节序

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
    4.9、字节序
    • 读取结果:0x 11 22 33 44 12 34 56 78
  • 大端字节序
    0x 01 02 03 04
    内存的方向 ----->
    内存的低位 -----> 内存的高位
    01 02 03 04
    4.9、字节序
    • 读取结果: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;
}