大小端模式转换函数

摘要:
htonl(),htons(),ntohl(),ntons()--大小端模式转换函数不同机器内部对变量的字节存储顺序不同,有的采用大端模式,有的采用小端模式。小端模式是指低字节数据存放在低地址处,高字节数据放在高地址处。Linux系统为大小端模式的转换提供了4个函数,输入manbyteorder命令可得函数原型:#includeuint32_thtonl;uint16_thtons;uint32_tntohl;uint16_tntohs;htonl表示hosttonetworklong,用于将主机unsignedint型数据转换成网络字节顺序;htons表示hosttonetworkshort,用于将主机unsignedshort型数据转换成网络字节顺序;ntohl、ntohs的功能分别与htonl、htons相反。

htonl(),htons(),ntohl(),ntons()--大小端模式转换函数

不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian)。
大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处。
小端模式是指低字节数据存放在低地址处,高字节数据放在高地址处。
在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,因此 TCP/IP 协议规定了在网络上必须采用网络字节顺序(也就是大端模式) 。
通过对大小端的存储原理分析可发现,对于 char 型数据,由于其只占一个字节,所以不存在这个问题,这也是一般情况下把数据缓冲区定义成 char 类型 的原因之一。对于 IP 地址、端口号等非 char 型数据,必须在数据发送到网络上之前将其转换成大端模式,在接收到数据之后再将其转换成符合接收端主机的存储模式。
Linux 系统为大小端模式的转换提供了 4 个函数,输入 man byteorder 命令可得函数原型:

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong); 
 
uint16_t htons(uint16_t hostshort); 
 
uint32_t ntohl(uint32_t netlong); 
 
uint16_t ntohs(uint16_t netshort);

htonl 表示 host to network long ,用于将主机 unsigned int 型数据转换成网络字节顺序;
htons 表示 host to network short ,用于将主机 unsigned short 型数据转换成网络字节顺序;
ntohl、ntohs 的功能分别与 htonl、htons 相反。

That which didn't kill me makes me stronger

免责声明:文章转载自《大小端模式转换函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Qt]自定义QStyle——实现QProgressBar自定义样式Lua初学习 9-14_03 迭代器 ( ipairs 与 pairs)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32 + UIP + ENC28J60 实现TCP 简单通讯

MCU: STM32F103C6T6 背景 上次介绍了怎么把UIP移植到STM32中来,并最后实现一个ping操作,这次在上次基础上实现MCU当TCP服务端,电脑当客户端通过TCP端链接MCU,实现通讯。 为保证程序尽量精简,程序在接受到TCP数据后,会原封不动返回给客户端(电脑), 并通过串口打印。 在使用UIP TCP功能前,需要可以让MCU获取当前时...