首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

聯合體與大小端模式:記憶體佈局深度解析

     編輯:關於C語言

前言

聯合體 讓多個成員共享同一塊記憶體,這特性使其成為檢測系統大小端模式的經典工具。本文將從原理、程式碼實作到實際應用全方位解析。

經典檢測程式碼

int check_endian(void) {
    union {
        int i;
        char c;
    } u;
    u.i = 1;
    return (u.c == 1);  // 1 = little-endian, 0 = big-endian
}

原理解析

記憶體佈局示意圖

  • Little-endian:低位元組存放在低地址,u.i = 1 時,最低位元組為 0x01,故 u.c == 1
  • Big-endian:高位元組存放在低地址,最低位元組為 0x00,故 u.c == 0

進階練習:ASCII 碼與聯合體互轉

union ASCII {
    char c;
    short i;
} m;

m.i = 70;
cout << "ASCII 70 的字元:" << m.c << endl;  // 輸出 'F'

m.c = 'a';
cout << "字元 'a' 的 ASCII:" << m.i << endl; // 輸出 97

此例展示聯合體如何讓同一記憶體以不同型別解讀,驗證 ASCII 碼對應關係。

應用場景

  • 網路協定封包解析(需處理網路位元組序)
  • 嵌入式暫存器映射
  • 型別雙關
  • 節省記憶體的資料結構設計

注意事項

  • 聯合體大小等於最大成員大小(對齊後)
  • 同一時間只能存取一個成員,否則屬未定義行為
  • 大小端差異可能導致跨平台資料不相容
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved