大端小端法

01引言

1.什么是字节序?

字节序,顾名思义,就是多字节对象在内存中的存储顺序,那么什么时候讨论字节序呢?仅当讨论“原子化“的数据且字节数大于1时讨论字节序(打开一个文件时为字节流,不需要讨论字节序)

2.计算机怎么存储?

计算机在内存中存放的顺序是从低地址到高地址(不论大端小端法都按照这个方式存储)并且以字节(byte)也就是8位(bit)以基本存储单位存储。

3.什么是高/低字节?

高字节即最高有效字节(MSB),低字节即最低有效字节(LSB)。如:0X12345678 从高位到低位的字节依次是:12、34、56、78

目前有两种不同的存储方案,大端法和小端法。现代处理器大多为双端法,大小端都支持,可以配置称大端法或者小端法。

02大/小端法

  • 基本概念

    大端法:高字节在前,即高字节存放在低地址

    小端法:低字节在前,即低字节存放在低地址

    以0x12345678为例

大端法:MSB(最高有效字节)在前
内存地址 0x001 0x002 0x003 0x004
存储数据 0x12 0x34 0x56 0x78
小端法:LSB(最低有效字节)在前
内存地址 0x001 0x002 0x003 0x004
存储数据 0x78 0x56 0x34 0x12

03怎么判断我的机器是大端法还是小端法?

#include
union store//联合体,共占一片内存
{
    int data;
    char  strr[sizeof(int)];
};
int main()
{
    store test;
    test.data = 0X01020304;
    if(test.strr[0] == 4  && test.strr[3] == 1)
        printf("小端法\n");
    else if(test.strr[0] == 1 && test.strr[3])
        printf("大端法\n");
    else
        printf("不能判断\n");
    return 0;
}

你可能感兴趣的:(c++,数据结构,开发语言)