C++ union以及大小端

union

一个特殊的类,联合体;

union {

    int a;

    char c;

    short s;

} un;

联合体内的各种数据共用一个内存,所以联合体所占内存就等于占用内存最大的成员的内存大小;

一个时刻只能给一个成员赋值,赋值后该内存的数据就被修改。

 

大小端

指内存中字节的储存方式:大端、小端;

比如要存储一个二进制数据00010010;

大端的存储方式就是将高序字节0001存储在高地址,低序字节0010存储在低地址;小端相反

C++ union以及大小端

使用union判断本机是大端还是小端存储方式

#include <iostream>
using namespace std;

int main() {
    union {
        int i;
        char c;
    } u;
    u.i = 1;
    if(u.c == 1)
        cout << "小端" << endl;
    else
        cout << "大端" << endl; 

原理很简单:联合体内的整型和字符数据存储位置一样,一旦你给整型赋值了,字符的数据值便是整型的第一段四分之一的低地址,如果是小端字节序,那么该低地址存储的就是“1”的低序字节,也就是“1”;反之就是大端;