Little vs Big Endianess:如何解释测试

atb*_*atb 9 c endianness

所以我正在编写一个程序来测试机器的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

如果我们分成不同的部分:

  1. &x:这将获取变量所在位置的地址x,即&x指向的变量x.类型是int *.

  2. (char *)&x:这将获取x(是a int *)的地址并将其转换为a char *.

  3. *(char *)&x:这取消引用char *指向的&x,即获取存储的值x.

现在,如果我们回到x以及如何存储数据.在大多数机器上,x是四个字节.存储1x集合到最低显著位1,其余的0.在小端机器上,它存储在内存中0x01 0x00 0x00 0x00,而在大端机器上则存储为0x00 0x00 0x00 0x01.

表达式的作用是获取这些字节中的第一个并检查它是否1存在.