【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位短整型
  • 主机为小端字节序,这些函数将参数做相应的大小端转换然后返回
  • 主机为大端字节序,这些函数不做转换,参数原封不动的返回
相关推荐
.道阻且长.5 分钟前
Linux软件包管理器
linux·运维·ubuntu·职场和发展·centos
Nebula_g19 分钟前
云禾外卖补充—项目整体后端运行逻辑-对流程的更深层次理解
java·开发语言·网络·数据库·状态模式·javase
想做小南娘,发现自己是女生喵29 分钟前
第二周学习文档 Linux C 文件操作
linux·c语言·学习
元岳数字人小元29 分钟前
一台终端兼顾接待与咨询,AI数字人对话赋能线下多场景服务
运维·人工智能·人机交互·交互·语音识别·源代码管理
djjjx.37 分钟前
Linux进程篇(三):深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑
linux·运维·服务器
乔旭伟40 分钟前
Linux 服务器环境搭建实战笔记:最小化安装、Docker Compose 编排与上线检查全流程
linux·服务器·笔记
一次旅行2 小时前
DeepSeek‑V4.1‑Flash‑1017完整解读:模型升级+Search/Fetch搜索API开放,Agent开发者要注意哪些坑
前端·网络·人工智能
.Bryce.2 小时前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd