htonl(),htons(),ntohl(),ntons()--大小端模式转换函数_weixin_34310127的博客-程序员秘密

技术标签: 网络  操作系统  

不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian)。
大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处。
小端模式是指低字节数据存放在低地址处,高字节数据放在高地址处。

在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,因此 TCP/IP 协议规定了在网络上必须采用网络字节顺序(也就是大端模式)
通过对大小端的存储原理分析可发现,对于 char 型数据,由于其只占一个字节,所以不存在这个问题,这也是一般情况下把数据缓冲区定义成 char 类型 的原因之一。对于 IP 地址、端口号等非 char 型数据,必须在数据发送到网络上之前将其转换成大端模式,在接收到数据之后再将其转换成符合接收端主机的存储模式。

Linux 系统为大小端模式的转换提供了 4 个函数,输入 man byteorder 命令可得函数原型:

 

  1. #include <arpa/inet.h> 
  2.  
  3. uint32_t htonl(uint32_t hostlong); 
  4.  
  5. uint16_t htons(uint16_t hostshort); 
  6.  
  7. uint32_t ntohl(uint32_t netlong); 
  8.  
  9. uint16_t ntohs(uint16_t netshort); 
#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 相反。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34310127/article/details/86052869

智能推荐

好奇心 I UX 设计之旅 - 初识 UX_衡石科技的博客-程序员秘密

前言 Profile你能想到一款自己非常喜欢用而且想要推荐给朋友使用的产品吗?如果有,那一定是 UX 做得非常好的产品。所有大大小小的公司都在依靠 UX 设计来让产品好用而且用得开心。今天我们一起来学习下 UX 的那些事儿吧。UX 是什么UX = User Experience,即用户体验,用户体验是用户与产品交互时或者是体验产品时的感受。用户是使用产品的人,产品可以是一件商品、一项服务或者是一个功能,比如一包薯片、一个 app。UX 设计起源谁能想到,最早的 UX 设计来自..

集成电路竞赛——Robei 杯之上位机_Ninquelote的博客-程序员秘密

#今天也是咸鱼的一天~上一回在写UART的时候,就感觉到了一个问题,单纯的Robei EDA的仿真其实没有什么实际的应用价值,最多就是给刚刚入门 EDA的人熟悉一下这个设计和仿真流程。等到熟练运用了,设计其实可以照搬实际代码的。另一个很头疼的问题就是,在实际的比赛过程中,保证Robei EDA 设计仿真 ——生成模块文件——导入FPGA开发环境——实现功能,这么一个流程估计是不大可能的,比较...

淘宝网系统架构分析以及数据库架构简介_deyuhui0938的博客-程序员秘密

一个成熟的大型网站(如淘宝、京东等)的系统架构需要考虑诸多复杂的因素,因为像淘宝这种大型网站数据量比一般的网站要大的多,所以在设计架构方面也要复杂的多,既要考虑成本因素也要考虑访问速度安全性等。这里我简单的对淘宝的网站系统架构进行一个简单的分析。 淘宝作为一个大型购物网站,其数据量是很大的,所以不像一般网站,淘宝需要用各种方法来保证服务器的正常运行以及用...

python对象的赋值和参数传递_python 对象赋值_loglikelihood的博客-程序员秘密

python对象的可变类型和不可变类型的赋值和参数传递。

随便推点

D star路径搜索算法_d星算法_肚皮朝上的刺猬的博客-程序员秘密

D Star 寻路算法一、简介二、算法介绍2.1 符号表示2.2 算法描述三、算法总结一、简介“D*算法”的名称源自 Dynamic A Star,最初由Anthony Stentz于“Optimal and Efficient Path Planning for Partially-Known Environments”中介绍。它是一种启发式的路径搜索算法,适合面对周围环境未知或者周围环境存...

ipv6简介_ipv6 fd00_每天进步一点(๑• . •๑)的博客-程序员秘密

一、IPv6地址介绍1,地址格式长度:128bits,16bytes 每16bits划分为一段,转为16进制数,以冒号”:”来分隔 如果一段中的16位都为0,则可以用::来代替,注意:双冒号只能出现一次(在双冒号处填充0,直至128位地址填满为止。但是,如果同一地址中出现两个冒号对,就无法确定每个零地址块的大小)2001:0D12:0000:0000:02AA:0987:FE29:9871=2001:0D12::02AA:0987:FE29:98712,地址结构 Ipv6地址= 前缀

CPython、IPython 、PyPy 、Jython 、IronPython _jython [email protected]的博客-程序员秘密

CPython是特指C语言实现的Python,就是原汁原味的Python。之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。如下是官方对CPython的说明:CPython is Guido van Rossum’s reference version ...

Yahoo 日本 api_yahoo.jp api_q279838089的博客-程序员秘密

yahoo jp,还算比较小的平台,公司也是用来清库存,但订单量越来越大,也是时候集成了,但是网上资料很少,几乎没有,官方api都是日本,真是坑,走了好久才走出来。我们讨论仅仅是最基本的订单获取,首先,除了需要去   アプリケーションの管理 申请基本资料key,关于订单的获取,还需要另外再单独申请 使用订单api,里面的ip地址要填写正确,不然获取不了数据,这是第一个坑。官网有php的sd

Pytorch Mask RCNN训练自定义数据集_mask rcnn pytorch训练自己数据集_不会写作文的李华的博客-程序员秘密

前言(必读)最近做目标检测,然后记录一下 Faster RCNN、Mask RCNN来做目标检测踩得那些坑。首先,本文并不是利用Pytorch从头去实现Faster RCNN、Mask RCNN这两个结构的文章。如果有意向去从头实现并了解每一步细节可以看看下面这些视频和博客:来自B站的两位大佬讲解大佬一:视频 博客 GitHub大佬二:视频 博客 GitHub上面都是利用pytorch从原理到具体实现的步骤。不过本文主要还是利用Pytorch中的Tor

equals()重写规则_Wanna926的博客-程序员秘密

为什么equals()方法要重写?判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法。

推荐文章

热门文章

相关标签