多字節數據(如 int、float)在內存中存儲順序由 CPU 架構決定:
以 32 位整數 0x12345678 為例,假設起始地址為 0x1000:
| 地址 | 小端模式內容 | 大端模式內容 |
|---|---|---|
| 0x1000 | 0x78 (低位) | 0x12 (高位) |
| 0x1001 | 0x56 | 0x34 |
| 0x1002 | 0x34 | 0x56 |
| 0x1003 | 0x12 (高位) | 0x78 (低位) |
#include <stdio.h>
int main() {
int num = 0x12345678;
unsigned char *p = (unsigned char *)#
printf("當前機器字節序: ");
if (p[0] == 0x78) {
printf("小端模式\n");
} else if (p[0] == 0x12) {
printf("大端模式\n");
}
printf("內存分佈: ");
for (int i = 0; i < 4; i++) {
printf("%02X ", p[i]);
}
printf("\n");
return 0;
}
htonl()/ntohl() 轉換。char* 訪問 int 時觀察到的字節順序即為當前端模式。誤區:「int 存儲時第一位是高地址還是低地址」
正確理解:不是「第一位」,而是「最低有效字節(LSB)」放在哪。小端:LSB 在低地址;大端:LSB 在高地址。位級別不跨字節重排。
現代 PC/手機絕大多數為 小端模式。開發中僅在網絡編程、文件解析、嵌入式跨平台時需顯式處理字節序。理解「低地址存低字節(小端)」即可應對 99% 場景。