c++builder 中用到一个htons()函数 不知其用法是什么

来源:百度知道 编辑:UC知道 时间:2024/06/13 20:23:43
程序的功能是计算一串数据的校验和,其中对没个数据都实行htons()转换,比如分步计算:
htons(0x4E);
计算的结果是0x4E00;
htons(0x54);
计算的结果是0x5400;
htons(0x30);
计算的结果是0x3000;

看似将8位的数据左移成16位数据,不知这结果对不对,很怀疑啊?因为我计算的最后结果跟别人算的不一样.
这些概念性的东西我也知道,只是不知道实际中是如何转换的,我上面也提到了几个转换的例子,是我单步执行程序读到的结果,因为我对这个结果表示怀疑,所以才请教,请问是否可以给出个转换的例子,或者帮我验证我上面的转换结果是否是正确的,即htons(0x4e)是否结果是0x4e00,如果不是,正确的结果是什么?

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楼提到的东西