📄 htons.txt
字号:
c++builder 中用到一个htons()函数 不知其用法是什么
悬赏分:50 - 解决时间:2007-10-19 12:29
程序的功能是计算一串数据的校验和,其中对没个数据都实行htons()转换,比如分步计算:
htons(0x4E);
计算的结果是0x4E00;
htons(0x54);
计算的结果是0x5400;
htons(0x30);
计算的结果是0x3000;
看似将8位的数据左移成16位数据,不知这结果对不对,很怀疑啊?因为我计算的最后结果跟别人算的不一样.
问题补充:这些概念性的东西我也知道,只是不知道实际中是如何转换的,我上面也提到了几个转换的例子,是我单步执行程序读到的结果,因为我对这个结果表示怀疑,所以才请教,请问是否可以给出个转换的例子,或者帮我验证我上面的转换结果是否是正确的,即htons(0x4e)是否结果是0x4e00,如果不是,正确的结果是什么?
answer:
htons多用于socket通信中,功能是将2个字节的数据从主机字节顺序变成网络字节顺序。
h:host
n:net
s:short
host to net short
对应的还有htonl,ntohl,ntohs。明白了吧。
我试过了
printf("%x\n",htons(0x004e));
结果是4e00。
因为通常我们的主机字节顺序是小序在前,而网络字节顺序是大序在前。所以转换后是颠倒了一下。
在intelCPU中,主机字节顺序和网络字节顺序不一样,例如:
192.168.1.0的IP在网络上传输就的是1.0.192.168。htons就是负责转换的功能,当然了也有把网络字节顺序转换为主机字节顺序的,就是1楼提到的东西
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -