我在下面的例子中遇到了一个字节序问题.在这个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);
}
Run Code Online (Sandbox Code Playgroud)
它在小端平台(Windows)上正常工作.
7f
28ff780000007f
Run Code Online (Sandbox Code Playgroud)
有用
但它在big endian(AIX)上失败了.
7f
7fdeadbeef
Run Code Online (Sandbox Code Playgroud)
不工作
我认为当我们传递32位的地址并在64位接收时,在大端平台上它接收到其他32位.但我不确定.请帮助我了解这背后发生的事情.我不能在这里正确编写第一行程序.
非常感谢安
首先,您编写了触发未定义行为的代码.您分配一个32位变量a,然后(in myfunc())尝试使用它,就像它是64位 - 更大的大小,因此您有效地尝试访问合法分配的变量.这可能会导致任何后果,并且您的程序无法正常工作,因为从C标准的角度来看,您尝试做的事情是没有意义的.