gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:27 25 4
gpt4 key购买 nike

在下面的示例中,我正在努力解决字节序问题。在此 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

有效

但它在大端 (AIX) 上失败了。

7f
7fdeadbeef

不工作

我认为当我们传递 32 位地址并以 64 位接收时,在大端平台上它以其他 32 位接收。但我不确定。请帮助我了解这背后发生的事情。我不能在这里正确地写出第一行程序。

非常感谢安

最佳答案

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

关于c - 通过引用 32/64 位传递时 C 中的字节顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com