请帮我澄清疑惑,因为以下内容让我感到非常困惑,而且在网上找不到一个清晰的答案。
#include<stdio.h>
int main()
{
int a = 0x44332211;
printf("Network - 0x%x\n", htonl(a));// Host to network
printf("Host - 0x%x\n", ntohl(a));// Network to host
return 0;
}
输出:
Network - 0x11223344
Host - 0x11223344
这里,htonl(0x44332211)
意味着将小端序(LE)转换为大端序(BE)。所以输出结果将是0x11223344
。我明白了这一点。我的问题是关于ntoh()
的问题。现在 ntohl(0x44332211)
的输出是什么?
我在一个终端上执行了这两个命令。所以,主机到网络即hton()
意味着从我的终端到网络的转换。这很有道理。但是,ntohl()
的含义是什么?只有当我们有:
a PC A----(ie hton)sending data over network------>(ie ntoh) to PC B?
此外,
ntohl()
期望网络字节序即大端字节序。请解释为什么它的输出与0x11223344
相同,而不是0x44332211
?
ntoh*()
和hton*()
。重要的是 API 支持主机字节顺序既不是大端也不是小端的情况,这种情况下转换的逆操作可能与转换本身不同。 - binki