4.9、字节序

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;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>