当前位置: 首页 > news >正文

网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()

目录

1,网络字节序和主机字节序

2. 函数的具体作用

2.1,htonl(Host to Network Long)

2.2,htons(Host to Network Short)

2.3,ntohl(Network to Host Long)

2.4,ntohs(Network to Host Short)

3,为什么需要这些函数?

4,适用范围

5,如何判断当前平台的字节序?

6,常见架构的字节序


1,网络字节序和主机字节序

  • 网络字节序
    规定采用 大端字节序(Big Endian),即 高位字节存储在低地址,这是网络协议(如 TCP/IP)使用的标准。

  • 主机字节序
    是指主机(计算机)的 CPU 如何存储多字节数据:

    • 大端字节序:高位字节存储在低地址。
    • 小端字节序:低位字节存储在低地址(如 x86、x86_64)。

不同平台的字节序可能不同,因此在网络通信中必须统一使用网络字节序(大端)。

2. 函数的具体作用

2.1,htonl(Host to Network Long)

  • 作用:将 32 位整数 从主机字节序转换为网络字节序(大端)。
  • 函数原型
uint32_t htonl(uint32_t hostlong);
  • 示例
uint32_t hostValue = 0x12345678;  // 在小端机器上,内存中为 0x78 0x56 0x34 0x12
uint32_t networkValue = htonl(hostValue);  // 转换为网络字节序:0x12 0x34 0x56 0x78

2.2,htons(Host to Network Short)

  • 作用:将 16 位整数 从主机字节序转换为网络字节序(大端)。
  • 函数原型
uint16_t htons(uint16_t hostshort);
  • 示例
uint16_t hostValue = 0x1234;  // 在小端机器上,内存中为 0x34 0x12
uint16_t networkValue = htons(hostValue);  // 转换为网络字节序:0x12 0x34

2.3,ntohl(Network to Host Long)

  • 作用:将 32 位整数 从网络字节序转换为主机字节序。
  • 函数原型
uint32_t ntohl(uint32_t netlong);
  • 示例
uint32_t networkValue = 0x78563412;  // 假设收到的网络数据
uint32_t hostValue = ntohl(networkValue);  // 转换为主机字节序(在小端机器上):0x12345678

2.4,ntohs(Network to Host Short)

  • 作用:将 16 位整数 从网络字节序转换为主机字节序。
  • 函数原型
uint16_t ntohs(uint16_t netshort);
  • 示例
uint16_t networkValue = 0x3412;  // 假设收到的网络数据
uint16_t hostValue = ntohs(networkValue);  // 转换为主机字节序(在小端机器上):0x1234

3,为什么需要这些函数?

在网络通信中,主机之间可能使用不同的字节序。因此,发送方需要将数据转换为网络字节序,接收方需要将网络字节序转换回主机字节序。这些函数可以确保数据在网络上传输时的字节序是 一致的,从而避免因字节序不同导致的数据错误。

例如:

假设两个主机进行 UDP 通信,传输一个 32 位整数:

发送端(小端架构):

uint32_t data = 0x12345678;
uint32_t networkData = htonl(data);  // 转换为大端
sendto(sockfd, &networkData, sizeof(networkData), 0, ...);

接收端(小端架构):

uint32_t receivedData;
recvfrom(sockfd, &receivedData, sizeof(receivedData), 0, ...);
uint32_t hostData = ntohl(receivedData);  // 转换回小端

这样,无论发送端和接收端的架构如何,数据都可以正确传输和解析。

4,适用范围

函数适用数据类型转换方向
htonl32 位整数主机字节序 → 网络字节序
htons16 位整数主机字节序 → 网络字节序
ntohl32 位整数网络字节序 → 主机字节序
ntohs16 位整数网络字节序 → 主机字节序

5,如何判断当前平台的字节序?

#include <iostream>int main() {uint32_t num = 1;if (*(reinterpret_cast<uint8_t*>(&num)) == 1) {std::cout << "小端字节序" << std::endl;} else {std::cout << "大端字节序" << std::endl;}return 0;
}
  • 如果输出 小端字节序,则当前主机使用 小端
  • 如果输出 大端字节序,则当前主机使用 大端

6,常见架构的字节序

处理器架构字节序
x86、x86_64小端
ARM(大多数情况)小端
PowerPC大端
SPARC大端

相关文章:

网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()

目录 1&#xff0c;网络字节序和主机字节序 2. 函数的具体作用 2.1,htonl&#xff08;Host to Network Long&#xff09; 2.2,htons&#xff08;Host to Network Short) 2.3,ntohl&#xff08;Network to Host Long&#xff09; 2.4,ntohs&#xff08;Network to Host Sho…...

【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦

目录 一、low级别,直接上传木马文件 1.1、准备一个木马文件 1.2、直接上传木马文件 1.3、访问木马链接 1.4、连接蚁剑 二、medium级别&#xff1a;抓包文件缀名 2.1、准备一个木马文件&#xff0c;修改后缀名为图片的后缀名 2.2、上传文件&#xff0c;打开burpSuite&…...

RHCE NFS

RHCE NFS 1.11. 2 NFS 主机名格式1.3 NFS 服务器配置1.3.1 /etc/exports 配置文件1.3.1.1 导出条目1.3.1.2 默认选项1.3.1.3 默认和覆盖选项 1.4 启动 NFS 服务器1.5 练习1.5.1 配置 NFS 服务器和客户端挂载1.5.2 配置autofs自动挂载&#xff08;需要时才挂载&#xff09; 1.6 …...

【数据结构】ArrayList与顺序表

ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…...

互联网基础

TCP/IP协议&#xff08;协议组&#xff09; 分层名称TCP/IP协议应用层HTTP,FTP,mDNS,WebSocket,OSC...传输层TCP&#xff0c;UDP网络层IP链路层&#xff08;网络接口层&#xff09;Ethernet&#xff0c;Wi-Fi... 链路层&#xff08;网络接口层&#xff09; 链路层的主要作用…...

ffmpeg.js视频播放(转换)

chrome 临时设置SharedArrayBuffer "C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-featuresSharedArrayBuffer 引用的js及相关文件 ffmpeg.min.js ffmpeg.min.js.map ffmpeg-core.js ffmpeg-core.wasm ffmpeg-core.worker.js 以上几个现…...

后端 Java发送邮件 JavaMail 模版 20241128测试可用

配置授权码 依赖 <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version> </dependency> <dependency><groupId>com.sun.mail</groupId><artifa…...

电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll

遇到“vcruntime140_1.dll无法继续执行代码”的错误通常表明电脑中的vcruntime140_1.dll文件有问题。这个文件属于Visual C Redistributable&#xff0c;对很多程序的运行至关重要。本文将提供几个步骤&#xff0c;帮助你迅速修复这一错误&#xff0c;使电脑恢复正常工作状态。…...

探索 Vue 3.0中Treeshaking特性?

Vue 3.0 中的 Tree Shaking 特性 Tree Shaking 是一种优化技术,旨在通过静态分析代码,去除未使用的模块或函数,从而减小最终的打包文件大小。在 Vue 3.0 中,由于其模块化设计和代码按需引入的特性,Vue 的 Tree Shaking 特性得到了增强,能够有效地去除那些在生产环境中未…...

Paddle Inference部署推理(十)

十&#xff1a;Paddle Inference推理 &#xff08;python&#xff09;API详解 9. 启用内存优化 API定义如下&#xff1a; # 开启内存 / 显存复用&#xff0c;具体降低内存效果取决于模型结构 # 参数&#xff1a;None # 返回&#xff1a;None paddle.inference.Config.enable…...

万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…...

全面+彻底解决VMware安装后没有VMnet1和VMnet8的问题

目录 1、摘要 &#xff08;1&#xff09;问题 &#xff08;2&#xff09;所用工具 ① Everything软件 ② CCleaner软件 2、问题的检查与确认 3、解决过程 &#xff08;1&#xff09;卸载已经安装的VMware &#xff08;2&#xff09;设置services.mcs&#xff1a;服务自…...

什么是堆?

堆&#xff08;Heap&#xff09;&#xff1a;堆可以看做是一颗用数组实现的二叉树&#xff0c;所以它没有使用父指针或者子指针。堆根据“堆属性”来排序&#xff0c;“堆属性”决定了树中节点的位置。 堆的特性 1.堆是完全二叉树&#xff0c;除了树的最后一层节点不需要是满的…...

微距动物和植物摄影后期森系风格Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 微距动物和植物摄影后期采用森系风格的 Lightroom 调色&#xff0c;将微距下的动植物世界打造成充满自然气息和梦幻感的画面。这种调色风格旨在突出动植物的细腻之美&#xff0c;同时营造出宁静、清新的森林氛围。 预设信息 调色风格&#xff1a;森系风格预设适合类…...

Qt6.8安卓Android开发环境配置

时隔多年&#xff0c;重拾QtCreator下Android开发。发现Qt6下安卓开发环境配置变简单不少&#xff01;只需三步即可在QtCreator下进行Android开发&#xff1a; 一、使用Qt Mantenance Tool进行Android模块的安装&#xff1a; 如果感觉安装网速较慢&#xff0c;可以查看本人另外…...

RK3568部署yolo8记录

本教程记录自己一下在RK3568上部署yolo8的步骤 板端驱动 在板端&#xff0c;首先查看rknpu驱动是否安装、存在。若键入下面的命令有返回则&#xff0c;证明驱动已安装。 dmesg | grep -i rknpu 瑞芯微官方说&#xff0c;驱动版本最好大于0.9.2。但是我看有的博主说&#xff…...

数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图

目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy ​编辑 3.使用DataFrame ​编辑 二、绘制条形图&#xff08;柱状图&#xff09; 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 ​编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…...

JavaScript原生深拷贝方法 structuredClone使用

structuredClone 简介 structuredClone 是现代浏览器提供的原生 JavaScript 方法&#xff0c;用于深拷贝对象。它可以处理各种复杂数据结构&#xff0c;包括嵌套对象、数组、Date、Map、Set 等&#xff0c;且支持循环引用。 语法 const clone structuredClone(value);value:…...

SpringBoot无法使用jkd8问题

1. 解决SpringBoot无法使用jdk8问题 创建一个高 jkd 版本&#xff0c;如 jkd21 在创建项目后&#xff0c;将 pom.xml中的 jdk 版本改为8&#xff0c;找到下图所在位置修改即可。 此外将 SpringBoot 的版本修改为 2 开头的 如2.7.4 &#xff0c;然后 刷新 Maven 项目即可。 在 …...

使用 Jina Embeddings v2 在 Elasticsearch 中进行后期分块

作者&#xff1a;来自 Elastic Gustavo Llermaly 在 Elasticsearch 中使用 Jina Embeddings v2 模型并探索长上下文嵌入模型的优缺点。 在本文中&#xff0c;我们将配置和使用 jina-embeddings-v2&#xff0c;这是第一个开源 8K 上下文长度嵌入模型&#xff0c;首先使用 semant…...

历史周期律的动力学本质:集体意识场视角下的文明演进规律

引言 历史周期律——王朝兴替、文明盛衰、社会变革的波浪式重复——是人类文明最令人困惑又最无法回避的现象。从司马迁的“天下大势&#xff0c;分久必合&#xff0c;合久必分”&#xff0c;到汤因比的文明挑战-回应理论&#xff0c;无数先贤试图揭示这一规律的底层逻辑。然而…...

联想拯救者15ISK加装NVMe SSD实战:从硬件兼容到系统部署的避坑指南

1. 联想拯救者15ISK加装NVMe SSD前的准备工作 我手上这台联想拯救者15ISK已经陪伴我征战了五年多&#xff0c;最近明显感觉到系统响应变慢&#xff0c;游戏加载时间变长。经过一番排查&#xff0c;发现瓶颈主要出在机械硬盘上。于是决定给它加装一块NVMe SSD&#xff0c;让老战…...

双模型工作流架构解析:从原理到实践,构建高效AI应用

1. 项目概述&#xff1a;双模型工作流的魅力与挑战最近在GitHub上看到一个挺有意思的项目&#xff0c;叫cait52099/openclaw-dual-model-workflow。光看名字&#xff0c;openclaw&#xff08;开放之爪&#xff09;和dual-model-workflow&#xff08;双模型工作流&#xff09;这…...

构建LLM智能体可学习记忆系统:Membrane架构与实战指南

1. 项目概述&#xff1a;为LLM智能体构建一个可学习、可修正的记忆系统如果你正在构建一个长期运行的LLM智能体&#xff0c;或者一个需要“记住”过去经验并从中学习的AI系统&#xff0c;那么“记忆”问题很可能已经让你头疼不已。传统的做法&#xff0c;要么是把所有对话历史一…...

CANN算子库幂运算API文档

aclnnPowTensorScalar&aclnnInplacePowTensorScalar 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math &#x1f4c4; 查看源码 产品支持情况 产品是否支持A…...

电子热量表设计:PIC16F913微控制器应用与热力计算

1. 电子热量表的核心原理与设计需求 在集中供暖系统中&#xff0c;热量表扮演着能量"会计"的角色&#xff0c;精确记录每户消耗的热能。其核心任务可以分解为三个关键参数的测量&#xff1a;进水温度、回水温度以及水流量。这三个参数通过热力学基本公式QmcpΔT相互关…...

星露谷物语模组加载器SMAPI:免费开源的游戏增强终极指南

星露谷物语模组加载器SMAPI&#xff1a;免费开源的游戏增强终极指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 星露谷物语模组加载器SMAPI是《星露谷物语》的官方模组API&#xff0c;为这款经典…...

AI助手自我进化框架:异步复盘与技能固化工程实践

1. 项目概述&#xff1a;一个让AI助手学会自我进化的“内功心法”如果你用过Claude、ChatGPT或者国内的一些大模型&#xff0c;肯定有过这样的体验&#xff1a;你跟它聊得挺好&#xff0c;让它帮你写个代码、分析个文档&#xff0c;它都能干。但聊着聊着&#xff0c;你发现它好…...

2026年3月 电子学会青少年软件编程机器人技术六级等级考试试卷真题【理论综合】

答案和更多内容请查看网站&#xff1a;【试卷中心 ----->电子学会 ---->机器人技术 ----> 六级】 网站链接 青少年软件编程历年真题模拟题实时更新 2026年3月电子学会青少年机器人技术&#xff08;六级&#xff09;等级考试试卷 一、单选题 第 1 题 TCP/IP四…...

GetQzonehistory:3分钟免费备份QQ空间所有历史说说

GetQzonehistory&#xff1a;3分钟免费备份QQ空间所有历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里那些承载青春记忆的说说会随着时间流逝而消失吗&#xf…...