gpt4 book ai didi

c - htonl() 是否更改 BIG ENDIAN 机器上的字节顺序?

转载 作者:太空狗 更新时间:2023-10-29 17:07:11 26 4
gpt4 key购买 nike

确实对 htonl() 感到困惑。在这么多链接中,我发现执行 htonl 的代码是:

#define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
((((unsigned long)(n) & 0xFF00)) << 8) | \
((((unsigned long)(n) & 0xFF0000)) >> 8) | \
((((unsigned long)(n) & 0xFF000000)) >> 24))

如果在两台机器上运行相同的代码,它将交换字节顺序。示例:uint32_t a = 0x1;

关于 Little Endian:

地址值

100   1
101 0
102 0
103 0

在 htonl(a) 之后

地址值

100   0
101 0
102 0
103 1

========================================== 在 Big Endian 机器上:

地址值

100   0
101 0
102 0
103 1

在 htonl(a) 之后

地址值

100   1
101 0
102 0
103 0

这是否意味着无论机器架构如何,htonl() 都会更改字节的顺序?

最佳答案

如果您正确使用它,那么它应该不会在大端机器上交换字节。

htonl 在特定于体系结构的 header 中定义。通常 machine/endian.h 将包含您的架构特定 header 。如果您重新定义它,那么它将执行您设置的操作。如果您想要真正的行为,那么您应该始终使用正确的架构 header 。在 big endian 机器上,这是一个 no op。在小端机器上,它通常链接到特定的处理器指令。

关于c - htonl() 是否更改 BIG ENDIAN 机器上的字节顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311435/

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