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 

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;
}

你可能感兴趣的:(C++,网络编程)