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

简介:

原文:http://qiuye.iteye.com/blog/844764

不同机器内部对变量的字节存储顺序不同,有的采用大端模式(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 相反。

相关文章
|
C语言
【C语言】强制指针变换,将多字节数据转成单字节数据
【C语言】强制指针变换,将多字节数据转成单字节数据
163 0
|
8月前
|
存储 编译器 C语言
【C语言】:整型提升,算术转换与大小端的介绍
【C语言】:整型提升,算术转换与大小端的介绍
80 0
|
C语言
【C】替换空格,宏实现整数的二进制奇偶位交换
【C】替换空格,宏实现整数的二进制奇偶位交换
80 0
【C】替换空格,宏实现整数的二进制奇偶位交换
|
9月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
639 1
|
存储 算法 编译器
你是真的“C”——操作符详解【下篇】+整形提升+算术转换
详解C语言中操作符+算术转换+整形提升知识点~
201 1
宽字符处理函数和窄字符处理函数对应表
字符分类:  宽字符函数普通C函数描述 iswalnum()  isalnum() 测试字符是否为数字或字母 iswalpha()  isalpha() 测试字符是否是字母 iswcntrl()  iscntrl() 测试字符是否...
1035 0
|
9月前
|
存储 Shell C语言
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
114 0
|
存储 IDE 编译器
C语言中整形的大小端存储
众所周知,在IDE Visual studio中,调试后可以在内存窗口中看见程序中一些变量的地址以及值 我们这里将一个16进制数字0x12345678存到内存中
85 0
|
9月前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)

热门文章

最新文章