字节序检测程序解释
#include<stdio.h>intmain(){intx=0x1;char*p=(char*)&x;if(*p==1)printf("little endian\n");elseprintf("big endian\n");for(inti=0;i<sizeof(int);i++)printf("%p: %04d\n",p+i,*(p+i));}核心原理
int x = 0x00000001 在内存中的存储: 小端序 (Little Endian): 大端序 (Big Endian): 低地址 → 高地址 低地址 → 高地址 [01][00][00][00] [00][00][00][01] ↑ ↑ p 指向这里 p 指向这里代码逐行解析
intx=0x1;// x = 0x00000001char*p=(char*)&x;// p 指向 x 的第一个字节(最低地址)char *让我们可以一次只读一个字节。
if(*p==1)// 检查最低地址存的是什么- 如果
*p == 1:最低地址存的是0x01(最低有效字节) →小端序 - 如果
*p == 0:最低地址存的是0x00(最高有效字节) →大端序
运行结果示例(小端序机器,如 x86)
little endian 0x7ffd1234: 0001 ← 最低有效字节在低地址 0x7ffd1235: 0000 0x7ffd1236: 0000 0x7ffd1237: 0000记忆方法
| 字节序 | 含义 | 低地址存放 |
|---|---|---|
| Little Endian | 小端在前 | 最低有效字节(LSB) |
| Big Endian | 大端在前 | 最高有效字节(MSB) |
小端序像"倒着写":0x01020304存为[04][03][02][01]