通过引用32/64位传递时C中的字节顺序问题

Ang*_*gel 0 c endianness

我在下面的例子中遇到了一个字节序问题.在这个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位.但我不确定.请帮助我了解这背后发生的事情.我不能在这里正确编写第一行程序.

非常感谢安

sha*_*oth 5

首先,您编写了触发未定义行为的代码.您分配一个32位变量a,然后(in myfunc())尝试使用它,就像它是64位 - 更大的大小,因此您有效地尝试访问合法分配的变量.这可能会导致任何后果,并且您的程序无法正常工作,因为从C标准的角度来看,您尝试做的事情是没有意义的.