天天看點

c語言:union,大小端

union:

不允許隻用聯合變量名作指派或其它操作。

也不允許對聯合變量作初始化指派,指派隻能在程式中進行。

小端存儲:

以位元組為機關,低存低,高存高。

任何資料在記憶體中都是以二進制(1或着0)順序存儲的,每一個1或着0被稱為1位,而在x86CPU上一個位元組是8位。比如一個16位(2位元組)的 short int型變量的值是1156,那麼它的二進制表達就是:00000100 10000100。由于Intel CPU的架構是Little Endian(小端存儲,請參數機算機原理相關知識),是以它是按位元組倒序存儲的,那麼就因該是這樣:10000100 00000100,這就是定點數1156在記憶體中的結構。

linux代碼中的用例:union判斷大小端[1]

#include <stdio.h>

static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.l)

void f1(void)
{
    printf("ENDIAN: %c\n" , ENDIANNESS);
}


int main()
{
    f1();
}
/*
root@oucaijun:/work/dcc# gcc *.c; ./a.out
ENDIAN: l
*/
      

繼續閱讀