首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言內存存儲序:大端模式與小端模式詳解

     編輯:程式設計疑難解答

核心概念

多字節數據(如 int、float)在內存中存儲順序由 CPU 架構決定:

  • 小端模式:低位字節存低地址,高位字節存高地址(x86、ARM 默認)。
  • 大端模式:高位字節存低地址,低位字節存高地址(網絡字節序、部分嵌入式 CPU)。

直觀示例

以 32 位整數 0x12345678 為例,假設起始地址為 0x1000:

地址小端模式內容大端模式內容
0x10000x78 (低位)0x12 (高位)
0x10010x560x34
0x10020x340x56
0x10030x12 (高位)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;
}

實際影響場景

  1. 網絡通信:協議規定大端(網絡序),需用 htonl()/ntohl() 轉換。
  2. 文件格式:BMP、JPEG 等規定大端;Windows BMP 文件頭為小端。
  3. 跨平台數據共享:序列化時需約定字節序或使用 Protocol Buffers 等自處理庫。
  4. 指針類型轉換:char* 訪問 int 時觀察到的字節順序即為當前端模式。

常見誤區澄清

誤區:「int 存儲時第一位是高地址還是低地址」

正確理解:不是「第一位」,而是「最低有效字節(LSB)」放在哪。小端:LSB 在低地址;大端:LSB 在高地址。位級別不跨字節重排。

總結

現代 PC/手機絕大多數為 小端模式。開發中僅在網絡編程、文件解析、嵌入式跨平台時需顯式處理字節序。理解「低地址存低字節(小端)」即可應對 99% 場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved