#include <stdio.h>
int main() {
union {
short value; // 2字节
char bytes[sizeof(short)]; // char[2]
} test;
test.value = 0x0102;
if((test.bytes[0] == 1) && (test.bytes[1] == 2)) {
printf("大端字节序\n");
} else if((test.bytes[0] == 2) && (test.bytes[1] == 1)) {
printf("小端字节序\n");
} else {
printf("未知\n");
}
printf("%s",test.bytes);
return 0;
}
这是一个识别自己的主机是小端字节序还是大端字节序的程序,我在linux系统下编译运行,为什么最后 printf("%s",test.bytes);这行没有输出任何内容,输出结果如下:
另外可以麻烦大伙们解释下为什么令test的值为0x0102,bytes就自动填值了呢?
union 是个联合体,联合体类似结构体struct,区别是struct中每个成员占据相同大小的不同内存,而联合体中每个成员共享同一个内存
所以你给其中一个成员赋值,其他成员就都有值了
联合体本来就是用来做类型转换用的,最常见的用法就是把int拆成4个byte之类的
这里是把short拆成char,或者反过来把2个char合并成short
你这里想要输出,要循环数组按%d输出,不要按字符串输出
按字符串输出是将char全部按ascii码变成字符,而1和2没有对应的字符,是不可见的