大小端字节转化
#include <stdio.h>
union test //所有成员共享同一段内存(只为最长成员分配空间)
{
int a;
char b;
};
int main()
{
printf("%d\n", sizeof(union test));//union的长度为union内部最大数据类型大小的整数倍,且大于等于最大的数据成员所占的存储空间。
union test t;
t.a = 1;
t.a = ((t.a & 0x000000ff) << 24) | ((t.a & 0x0000ff00) << 8) |((t.a & 0x00ff0000) >> 8) |((t.a & 0xff000000) >> 24);//大小端交换(四个字节)
printf("%d\n", t.a);
return 0;
}
判断大小端
#include <stdio.h>
union test//共用一段内存空间,只为最长成员分配空间
{
short val;
char array[2];
};
int main()
{
union test t;
t.val = 0x0102;
if (t.array[0] == 1 && t.array[1] == 2)//大端字节序:高字节存放在低地址,低字节存放在髙地址
{
printf("big endian!\n");
}
else if (t.array[0] == 2 && t.array[1] == 1)//小端字节序:低字节存放在低地址,低字节存放在低地址
{
printf("little endian!\n");
}
return 0;
}