- 小端就是低位字节放在内存的低地址端,高位字节放在内存的高地址端。
- 大端就是高位字节放在内存的低地址端,低位字节放在内存的高地址端。
举一个例子,比如数字0x12 34 56 78
在内存中的表示形式为:
- 大端模式:
低地址 —————–> 高地址
0x12 | 0x34 | 0x56 | 0x78
- 小端模式:
低地址 ——————> 高地址
0x78 | 0x56 | 0x34 | 0x12
借助共用体,我们可以检测 CPU 是大端模式还是小端模式,请看代码:
#include <stdio.h>
int main()
{
union{
int n;
char ch;
} data;
data.n = 1;
if(data.ch == 1){
printf("Little-endian\n");
}else{
printf("Big-endian\n");
}
return 0;
}
共用体的各个成员是共用一段内存的。1 是数据的低位,如果 1 被存储在 data 的低字节,就是小端模式,这个时候 data.ch 的值也是 1。如果 1 被存储在 data 的高字节,就是大端模式,这个时候 data.ch 的值就是 0。