union聯合體與字節序

union聯合體與字節序

1.union聯合體

union{
   short value;
   char union_bytes[sizeof(short)];
}test;
  • union聯合體所有數據成員共享一段內存,後寫入的成員數據將覆蓋之前的成員數據,成員數據都有相同的首地址。
  • 上述代碼段的short型數據與char型數組在同一地址空間。

2.字節序

  • 大端字節序(big endian):指一個整數的高位字節(23 ~ 31bit)存儲在內存的低地址處,低位字節(0 ~ 7bit)存儲在內存的高地址處。

  • 小端字節序(little endian):指整數的高位字節存儲在內存的高地址處,而低位字節存儲在內存的低地址處。

  • 大端字節序又稱網絡字節序,小端字節序又稱主機字節序
  • 在網絡的端到端通信中,發送端總是把要發送的數據轉化爲大端字節序(網絡字節序)數據後再發送,而接收端知道發送端總是發送的大端字節序,便可以根據自身採用的字節序決定是否對接收到的數據進行轉換(小端機轉換,大端機不用轉換)。
#include <iostream>

using namespace std;

union UType{
    short value;
    char union_byte[sizeof(short)];
};

int main()
{
    UType test;
    test.value = 0x0102;
    if(test.union_byte[0] == 1 && test.union_byte[1] == 2)
    {
        cout << "大端字節序." << endl;
    }
    else if(test.union_byte[0] == 2 && test.union_byte[1] == 1)
    {
        cout << "小端字節序" << endl;
    }
    else
    {
        cout << "未知." << endl;
    }

    return 0;
}
發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5157
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章