所以我正在编写一个程序来测试机器的endianess并打印它.我理解小端和大端之间的区别,但是,从我在网上找到的,我不明白为什么这些测试显示机器的结束.
这就是我在网上找到的.*(char*)&x是什么意思,它是如何证明机器是Little-Endian的?
int x = 1;
if (*(char *)&x == 1) {
printf("Little-Endian\n");
} else {
printf("Big-Endian\n");
}
Run Code Online (Sandbox Code Playgroud)
Som*_*ude 14
如果我们分成不同的部分:
&x:这将获取变量所在位置的地址x,即&x指向的变量x.类型是int *.
(char *)&x:这将获取x(是a int *)的地址并将其转换为a char *.
*(char *)&x:这取消引用char *指向的&x,即获取存储的值x.
现在,如果我们回到x以及如何存储数据.在大多数机器上,x是四个字节.存储1在x集合到最低显著位1,其余的0.在小端机器上,它存储在内存中0x01 0x00 0x00 0x00,而在大端机器上则存储为0x00 0x00 0x00 0x01.
表达式的作用是获取这些字节中的第一个并检查它是否1存在.