⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htons.txt

📁 详细讲解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 + -