做一网站要什么软件,北京十强装饰公司排名,sem竞价托管价格,合肥市城乡建设局大小端#xff08;Endian#xff09;是指多字节整数在内存中存储的方式。在计算机中#xff0c;一个多字节整数由多个字节组成#xff0c;而不同的机器和处理器在存储多字节整数时会有两种不同存储方式#xff0c;分别为大端字节序和小端字节序。
以一个4字节整数0x12345…大小端Endian是指多字节整数在内存中存储的方式。在计算机中一个多字节整数由多个字节组成而不同的机器和处理器在存储多字节整数时会有两种不同存储方式分别为大端字节序和小端字节序。
以一个4字节整数0x12345678为例在大端字节序中存储为12 34 56 78在小端字节序中存储为78 56 34 12。大端字节序是指在内存中较高的地址保存数值的低位字节而较低的地址保存数值的高位字节小端字节序则相反在内存中较高的地址保存数值的高位字节而较低的地址保存数值的低位字节。
C语言中对于大小端字节序一般使用联合体来判断。如下
#include stdio.hint main()
{union {short s;char c[sizeof(short)];} un;un.s 0x0102;if (sizeof(short) 2) {if (un.c[0] 1 un.c[1] 2)printf(big-endian\n);else if (un.c[0] 2 un.c[1] 1)printf(little-endian\n);elseprintf(unknown\n);}else {printf(sizeof(short) %d\n, sizeof(short));}return 0;
}上述代码中联合体的大小等于short的大小可以通过访问其低位字节和高位字节的方式来判断是大端字节序还是小端字节序。如果联合体的低地址保存的是s的高位字节那就表明该机器是小端字节序。
大端和小端的区分方式在所有字节正序列出来后表现是完全相反的即在大端字节序中先写的字节的地址编号越大而在小端字节序中先写的字节的地址编号越小因此只需将一个数的二进制表示按字节分割后列出来即可判断其是否为大端字节序或小端字节序。
假设某个整数在内存中按照如下方式存储
十六进制表示 12 34 56 78 二进制表示 00010010 00110100 01010110 01111000
根据这个数字的存储方式可以判断出这个系统是大端还是小端以下是两种方式的比较
大端字节序低地址存放高位字节高地址存放低位字节
内存地址存放数据0x10000x120x10010x340x10020x560x10030x78
小端字节序低地址存放低位字节高地址存放高位字节
内存地址存放数据0x10000x780x10010x560x10020x340x10030x12
这里假设内存中存储的数值是0x12345678通过在内存中查看数值的存储方式可以发现在大端字节序中最高位字节的数值存储在最低地址的位置上即0x12存储在了0x1000的位置而在小端字节序中最高位字节的数值存储在最高地址的位置上即0x12存储在了0x1003的位置上。