【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位短整型
  • 主机为小端字节序,这些函数将参数做相应的大小端转换然后返回
  • 主机为大端字节序,这些函数不做转换,参数原封不动的返回
相关推荐
南境十里·墨染春水25 分钟前
linux学习进展 守护进程
linux·服务器·学习
REDcker1 小时前
Android HWASan 详解:硬件标记原理、Clang 启用与排障实践
android·linux·debug·编译·clang·asan·hwasan
Zzzzmo_1 小时前
【网络编程】套接字
网络·套接字
国科安芯1 小时前
AS32S601 抗辐射 MCU 在星载高速光通信链路的集成设计与性能验证
网络·单片机·嵌入式硬件·risc-v·安全性测试
wangl_922 小时前
Modbus RTU 与 Modbus TCP 深入指南-附录:快速参考表
网络·网络协议·tcp/ip·tcp·modbus·rtu
Agent手记2 小时前
供应商资质智能审核自动化、落地方法与合规校验方案:AGI时代下的企业级风控重塑
运维·人工智能·ai·自动化·agi
数智工坊2 小时前
VMware 17 Pro 中 Ubuntu 虚拟机共享 Windows 文件夹(完美踩坑版)
linux·人工智能·windows·ubuntu
广州灵眸科技有限公司2 小时前
瑞芯微(EASY EAI)RV1126B openclaw部署接入飞书
linux·网络·人工智能·算法·yolo·飞书
Irissgwe2 小时前
六、Ext系列文件系统(1.基础概念铺垫)
linux·block·inode·ext文件系统·block group·块儿
Irissgwe2 小时前
四、进程控制(进程等待与进程程序替换,shell)
linux·shell·进程·进程等待·进程程序替换