判断系统大小端字节序

    技术2022-07-11  119

    什么是大小端字节序?

    字节序----大于一个字节类型的数据在内存中的存放顺序。

    多字节对象在机器上被存储为连续的字节序列,对象的地址为所使用字节的首地址(最小地址)。

    在linux中经过sizeof(int)得到int类型占4个字节

    例如,假设一个类型为int的变量x的地址为0x4000,那么x的四个字节将被存储在存储器的0x4000,0x4001,0x4002,0x4003位置。

    字节序分类

    定义:

    大端: 高位字节存放在内存的低地址端,低位字节存放在内存的高地址端小端: 低位字节存放在内存的低地址端,高位字节存放在内存的高地址端

    假设变量x的类型为int,&x=0x4000,其16进制值为0x12345678,地址从0x4000到0x4003字节。

    大端

    地址0x40000x40010x40020x4003值0x120x340x560x78

    由上图可见,x的最高字节12在地址最低位存储,这和我们平时从最高位开始的书写习惯相同。

    小端

    地址0x40000x40010x40020x4003值0x780x560x340x12

    由上图可见,与大端相反,x的最低字节78在地址最低位存储。 小端存储后:0x78563412 大端存储后:0x12345678

    如何判断字节序大小端

    可以通过下面的小程序测试自己的机器是大端字节序还是小端字节序

    #include <stdio.h> union data//共用体 { char ch; int i; }un; int main(int argc,char const *argv[]) { un.i = 0x12345678; printf("存入值:%x\n",un.i); printf("最低地址为:%x\n",un.ch); if(un.ch == 0x78) { printf("小端\n"); } else { printf("大端\n"); } return 0; }

    输出结果 使用共用体原因: union型数据所占的空间等于其最大的成员所占的空间。且对该共用体的访问不论对哪个变量的存取都是从union的首地址开始的。通过检测第一个字节存放的数据即可得出结果。

    Processed: 0.011, SQL: 9