当前位置: 首页 > 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…...

51单片机按键控制实战:从消抖到状态切换的完整代码解析

51单片机按键控制实战&#xff1a;从消抖到状态切换的完整代码解析 在嵌入式系统开发中&#xff0c;按键控制是最基础也最关键的交互方式之一。无论是简单的家电控制面板&#xff0c;还是复杂的工业设备操作界面&#xff0c;按键作为人机交互的桥梁&#xff0c;其稳定性和响应速…...

Jellyfin演员头像总是不全?试试这个TMM刮削+本地导入的终极方案

Jellyfin演员头像缺失难题的工程级解决方案&#xff1a;TMM刮削与本地化元数据管理实践 每次打开精心搭建的Jellyfin影音库&#xff0c;看到那些残缺不全的演员头像&#xff0c;就像翻开一本缺页的相册——这种体验对于追求完美的影音爱好者来说简直难以忍受。经过反复测试发现…...

FSCalendar深度链接集成指南:从URL直接打开指定日期的终极解决方案

FSCalendar深度链接集成指南&#xff1a;从URL直接打开指定日期的终极解决方案 【免费下载链接】FSCalendar 项目地址: https://gitcode.com/gh_mirrors/fsc/FSCalendar FSCalendar是一款功能强大的iOS日历组件&#xff0c;支持高度自定义和流畅的用户体验。在移动应用…...

RPA-Python与pytest-xdoctest集成:Xdoctest测试自动化

RPA-Python与pytest-xdoctest集成&#xff1a;Xdoctest测试自动化 【免费下载链接】RPA-Python Python package for doing RPA 项目地址: https://gitcode.com/gh_mirrors/rp/RPA-Python RPA-Python是一款功能强大的Python自动化库&#xff0c;而pytest-xdoctest则是一个…...

三维智能分割技术:从行业痛点到落地实践的全面解析

三维智能分割技术&#xff1a;从行业痛点到落地实践的全面解析 【免费下载链接】SAMPart3D SAMPart3D: Segment Any Part in 3D Objects 项目地址: https://gitcode.com/gh_mirrors/sa/SAMPart3D 问题场景&#xff1a;三维模型处理的现实困境 建筑设计行业&#xff1a;…...

空调智慧节能控制系统解决方案:一键部署,适配多场景节能需求

一、应用背景 当前&#xff0c;建筑能耗已成为社会总能耗的重要组成部分&#xff0c;其中空调系统能耗占比高达50%左右&#xff0c;尤其在商业综合体、高校、酒店、写字楼等大型建筑中&#xff0c;空调能耗过高、管理粗放的问题尤为突出。传统空调控制系统依赖人工操作&#xf…...

滤波实战:从原理到代码的平滑之旅

1. 滤波技术的前世今生 第一次接触滤波概念是在研究生时期做无人机姿态解算项目时。当时从陀螺仪和加速度计采集的原始数据跳得跟心电图似的&#xff0c;导师只说了一句"加个滤波器"&#xff0c;却让我在图书馆泡了整整两周。现在回想起来&#xff0c;滤波本质上就是…...

开源工具维护终止:微信云备份工具cloudbak风险应对指南

开源工具维护终止&#xff1a;微信云备份工具cloudbak风险应对指南 【免费下载链接】cloudbak 微信云备份&#xff0c;备份到服务器、Docker、NAS&#xff0c;Web访问。 项目地址: https://gitcode.com/gh_mirrors/cl/cloudbak 事件概述&#xff1a;cloudbak项目生命周期…...

ExplorerPatcher:如何用开源方案高效解决Windows 11界面定制难题?

ExplorerPatcher&#xff1a;如何用开源方案高效解决Windows 11界面定制难题&#xff1f; 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11 24H2带来了全新的界面设计&…...

Halcon实战:5分钟搞定特征点拼接图片(附完整代码解析)

Halcon特征点拼接实战&#xff1a;从原理到代码的完整指南 在工业视觉检测、医学影像分析和无人机航拍等领域&#xff0c;图像拼接技术扮演着关键角色。Halcon作为机器视觉领域的标杆工具&#xff0c;其强大的特征点匹配算法让复杂场景下的图像拼接变得简单高效。本文将带您深入…...