天天看点

c语言中union测试大小端,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

static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } };

#define ENDIANNESS ((char)endian_test.l)

void f1(void)

{

printf("ENDIAN: %c

" , ENDIANNESS);

}

int main()

{

f1();

}

引用:

1. http://21cnbao.blog.51cto.com/109393/120108