在下面的示例中,我正在努力解决字节序问题。 在这个main()传递32位整数的地址,myfunc()以64位接收它。
#include <stdint.h>
#include <stdio.h>
void myfunc(uint64_t *b)
{
printf("%llx\n", *b);
if ((*b & 255) == 127)
printf("\n It works\n");
else
printf("\n Not working\n");
}
main()
{
uint32_t a = 127;
printf("\n%lx\n", a);
myfunc(&a);
}
它在小端平台(Windows)上正常工作。
7f
28ff780000007f
它有效
但它在big endian(AIX)上失败了。
7f
7fdeadbeef
不工作
我认为当我们传递32位的地址并在64位接收时,在大端平台上它接收到其他32位。但我不确定。 请帮助我了解这背后发生的事情。我不能在这里正确编写第一行程序。
非常感谢 安
答案 0 :(得分:5)
首先,您编写了触发未定义行为的代码。您分配一个32位变量a
,然后(在myfunc()
中)尝试使用它,就好像它是64位 - 更大的大小,因此您有效地尝试访问合法分配的变量。这可能会导致任何后果,并且您的程序无法正常工作,因为从C标准的角度来看,您尝试做的事情毫无意义。