【Linux:网络字节序+大小端转换函数】

目录

网络字节序:

小端存储:

大端存储:

能否在报文中添加大小端信息?

字节转换函数:


网络字节序:

计算机中存在两种存储字节的方式,分别是:大端存储和小端存储,TCP/IP协议规定,网络数据字节流应采用大端字节序。如果当前发送的主机是小端机就需要将数据转化为大端,再发送。

小端存储:

  • 数据的低位字节存储到内存的低地址位, 数据的高位字节存储到内存的高地址位
  • 我们使用的PC机,数据的存储默认使用的是小端

大端存储:

  • 低位字节存储到高地址位处,高位字节存储到低地址位处
  • 套接字通信的存储是大端存储

能否在报文中添加大小端信息?

不可以,当报文发送时,对端主机解析报文解析报文是大端解析还是小端解析呢,可以理解该问题为一个"蛋生鸡还是鸡生蛋"的问题。压根儿就行不通

因此,网络协议(TCP/IP)直接规定网络通信必须大端字节序(低地址高字节),由此就需要有大小端转换的函数了

发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出

字节转换函数:

#include <arpa / inet.h>
uint 32_t htonl (uint 32_t hostlong)
uint 16_t htons (uint 16_t hostshort)
uint 32_t ntohl (uint 32_t netlong)
uint 16_t ntohs (uint 16_t netshort)
[字节转换函数]
  • h表示host,n表示network,l表示32位长整数,s表示16位短整型
  • 主机为小端字节序,这些函数将参数做相应的大小端转换然后返回
  • 主机为大端字节序,这些函数不做转换,参数原封不动的返回
相关推荐
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
生活爱好者!14 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-15 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
数智化管理手记15 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
LabVIEW开发16 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
壮哥_icon16 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi16 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
电商API_1800790524717 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫