我认为标记的问题和答案不符合我的期望。链接-> Same output for htonl() and ntohl() on an integer->说,网络字节顺序为大端,主机字节顺序为小尾数。我的困惑仍在继续。另外,什么是主机?仍然不能回答我的大多数问题。 我认为那些投票赞成关闭问题的人误解了我的问题 我投票赞成重新开放的问题 。请重新阅读并重新打开问题。
我已经阅读到,网络字节顺序始终以Big Endian表示。但是,我没有找到正式的消息来源。我做了一个片段,以查看这两个功能之间的差异,但是在同一台计算机上我得到了相同的结果。
#include <stdio.h>
int main() {
//first part
printf("%d\n", ntohs(12345));
printf("%d\n", ntohs(12345) == 12345);
// second part
printf("%d\n", htons(12345));
printf("%d\n", htons(12345) == 12345);
//third part
printf("%d\n", htons(htons(12345)));
printf("%d\n", ntohs(ntohs(12345)));
//fourth part
printf("%d\n", ntohs(htons(12345)));
return 0;
}
12345
吗? tl; dr我的机器是
小端。我还在与Big Endian一起使用的PowerPC上尝试了相同的代码后,第一部分和第二部分给出的结果都是12345
。由于机器的表示,它并不有趣。
Little-Endian计算机输出:(Mac OSX)
14640
0
14640
0
12345
12345
12345
大端计算机输出:(PowerPC)
root@debian-powerpc:~# gcc -c endian.c
root@debian-powerpc:~# gcc endian.c -o out
root@debian-powerpc:~# ./out
12345
1
12345
1
12345
12345
12345