为什么分配十六进制值会在小端机器上给出大端等效值?

Ada*_*ran 0 c endianness

这是一个简单的c语句:

uint32_t x = 0x04000000;
Run Code Online (Sandbox Code Playgroud)

在我的小端机器上,我假设 x 等于 4。但实际上它是 67108864。

所以一定有一些非常基本的东西我不明白。您能帮忙解释一下吗?

dbu*_*ush 6

当您对变量进行赋值时,您设置的是,而不是表示形式

十六进制数 0x04000000 与十进制数 67108864 相同,因此这就是被分配的值。事实上,数字以十六进制表示并不会改变分配的工作方式。

如果你做了这样的事情:

unsigned char n[4] = "\x4\x0\x0\x0";
memcpy(&x, n, sizeof(x));
Run Code Online (Sandbox Code Playgroud)

那么x在小端机器上将包含值 4。