htonl函数(Qt中有想ntohs,ntohl,htonl,htons这种功能的函数吗)

本文目录
- Qt中有想ntohs,ntohl,htonl,htons这种功能的函数吗
- htons htonl ntohl ntohs 的区别和作用
- 自己写的htonl函数
- htonl()的用法
- __constant_htonl(0x0d)是什么意思,他的值是什么
- htonl() ntohl()这两个函数有什么区别
- 关于htonl函数
Qt中有想ntohs,ntohl,htonl,htons这种功能的函数吗
ntohs、ntohl、htonl、htons是转换ip地址、端口号,socket发送的内容是不需要转换的
内容只要在接收socket读出来以后,对每个byte进行分析就行啦
htons htonl ntohl ntohs 的区别和作用
htons、htonl、ntohl、ntohs是用来在网络字节顺序和本机字节顺序之间相互转换的函数。
可以这么理解:
n :network;h :host;s:short;l:long
htons :host to network short型,依次类推。
具体用法为:
htons:
#include
u_short PASCAL FAR htons( u_short hostshort);
hostshort:主机字节顺序表达的16位数。
注释:
本函数将一个16位数从主机字节顺序转换成网络字节顺序。
返回值:
htons()返回一个网络字节顺序的值。
其余的同理。
自己写的htonl函数
代码没看,不是有现成的函数么?
另外好象WINDOWS是一样的,UNIX不一样,你的代码也没有#ifdef WIN之类的予编译,所以跨平台就有问题.
东西对不对,你自己调试下看嘛.
看代码和实际运行你的结果是正确的。
但是你输入123456结果出来不应该是563412,因为是输入的是10进制的HOHO,16进制的就是了。
另外忘记了WINDOWS是不是应该是这个结果......
应该是正确的,其实你可以实验几个数看看啊。我实验了几个都对啊.
htonl()的用法
htonl()()返回一个网络字节顺序的值。
参见:
htons(),ntohl(),ntohs(). 在Linux系统下:
#include 《arpa/inet.h》
uint32_t htonl(uint32_t hostlong);
有些系统包含的头文件是 《netinet/in.h》 而不是 《arpa/inet.h》. uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
网际协议在处理这些多字节整数时,使用大端字节序。
在主机本身就使用大端字节序时,这些函数通常被定义为空宏。
__constant_htonl(0x0d)是什么意思,他的值是什么
把数字转换为网络字节序
由于数据在计算机中的存放顺序不尽相同.如0X1122,高字节为0X11,低字节为0X22,在内存中占用两个字节的存储空间,可以高位字节(0X11)存于高字节,低位字节(0X22)存于低字节,也可能0X11存于低字节,0X22存于高字节,而网络是传送数据时高低字节是有规定,好像是低字节在先(记不清了,可以查资料),所以在用网络传数据的时候就要转换字节序,通常用的函数有htonl,htons,htonl是将一个数转换为32位网络字节序的数,htons是转换为16位网络字节序的数
htonl() ntohl()这两个函数有什么区别
htonl函数,是将主机端一个无符号长整数转换为TCP/IP协议网络的大端(big endian)格式的字节序列!
ntohl函数正好相反!
这两个函数多用于使用Intel处理器的主机,因为Intel处理器使用小端数据格式(little endian)!而TCP/IP协议网络是用大端(big endian)格式的!
关于htonl函数
这个是个字节序转换函数,具体的比较多,我就摘抄了,反正是一个转换而已,不是简单的转为网络字节,主要是因为主机字和网络字,字序不同~
htonl就是把本机字节顺序转化为网络字节顺序
所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低,低对高”(即一个数的高位字节存放于低地址单元,低位字节存放在高地址单元中)。但是计算机的内存存储数据时有可能是大尾顺序或者小尾顺序。
先举个例子:
int a = 0x403214;
int b = htonl(a);
我在VC++6.0调试这段代码,发现
&a的值为:0x0012ff44
其中0x0012ff44、0x0012ff45、0x0012ff46、0x0012ff47这四个单元的值依次为:14、32、40、00,即0x403214这个数的高位部分存放在高位地址中,低位部分存放在低位地址中,即小尾顺序。
&b的值为:0x0012ff40
其中0x0012ff40、0x0012ff41、0x0012ff42、0x0012ff43这四个单元的值依次为:00、40、32、14,即把原数0x403214的高位部分存放在低位地址中,低位部分存放在高位地址中。
由此可见,如果一个数以小尾顺序存储,经htonl函数调用后这个数的高地位字节会完全颠倒过来成为一个新的数。这个新的数在机器内部其实还是以小尾顺序存储的,但是相对于原来的数而言相当于是变成大尾顺序的了。
long型的0x40写完整为:0x 00 00 00 40,共四个字节,调用htonl后四个字节颠倒顺序,为0x 40 00 00 00。
同样,0x40 00 00 00调用htonl后变为0x 00 00 00 40,即0x40

更多文章:
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30





