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

网络传输中的大小端问题

网络传输协议(如 TCP/IP)规定使用大端字节序(网络字节序) 作为统一标准。

小端主机(如 Windows x86、ARM 默认小端),大端主机(如 PowerPC)

一、字节序的基本概念

  1. 小端字节序(Little-Endian)

    • 多字节数据的低位字节存于内存低地址,高位字节存于高地址。
    • 例如,整数0x12345678在小端内存中存储为:

      plaintext

      低地址 → 高地址  
      0x78 0x56 0x34 0x12  
      

  2. 大端字节序(Big-Endian)

    • 多字节数据的高位字节存于内存低地址,低位字节存于高地址。
    • 例如,整数0x12345678在大端内存中存储为:

      plaintext

      低地址 → 高地址  
      0x12 0x34 0x56 0x78  

二,网络中传输数据

在 Windows 系统中,两台 x86 架构的电脑通过 UDP 通信时,由于双方均为小端字节序,因此接收数据的字节序与发送端一致,无需进行网络字节序转换。

假设发送端发送整数0x12345678

  1. 发送过程

    • 在小端主机(如 Windows)中,0x12345678的内存布局为0x78 0x56 0x34 0x12
    • 发送时,直接将这 4 个字节按内存顺序发送,不做转换。
    • 网络中传输的字节顺序为:0x78, 0x56, 0x34, 0x12
  2. 接收过程

    • 接收端(同为小端主机)收到这 4 个字节后,直接将其解释为整数
    • 由于接收端也是小端序,这 4 个字节在内存中的布局与发送端完全一致,因此直接按整数读取即可得到正确值0x12345678
    • 无需调用ntohl()转换

三、代码示例(接收端解析逻辑)

#include <stdio.h>int main() {// 假设接收到的4字节数据(按内存顺序排列)unsigned char buffer[4] = {0x78, 0x56, 0x34, 0x12};  // 小端序// 方法1:直接通过指针转换(小端主机)int value = *(int*)buffer;printf("直接解析结果: 0x%08x\n", value);  // 输出: 0x12345678// 方法2:手动组合字节(验证逻辑)int manual_value = (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];printf("手动组合结果: 0x%08x\n", manual_value);  // 输出: 0x12345678return 0;
}
http://www.xdnf.cn/news/1013005.html

相关文章:

  • 一阶低通滤波器完整推导笔记
  • 【Chipyard】修改Gemmini 中PE的数量
  • JDK版本如何丝滑切换
  • 42 C 语言随机数生成详解:rand/srand 使用技巧、随机数范围控制、真实场景应用
  • Unity Assembly的灵活用法总结
  • 一块开发板多少钱?如何花最少的钱入门?
  • 【大模型02---Megatron-LM】
  • Node.js特训专栏-基础篇:2. JavaScript核心知识在Node.js中的应用
  • Flink 系列之二十八- Flink SQL - 水位线和窗口
  • 【计算机组成原理 第5版】白、戴编著 第七章 总线系统 课后题总结
  • 为什么电流、电压相同,功率却不同
  • ETLCloud中数据脱敏规则的使用技巧
  • 【有源医疗器械检测的常见问题、整改方法、送检了解】
  • HALCON第六讲->测量和检测
  • leetcode0721. 账户合并-medium
  • 推荐一个 github加速器
  • 探索MCP Server Chart:AI赋能的统计图表自动生成工具
  • Docker|简单入门
  • SAP BTP连接SAP,云连接器
  • 安装 LibreOffice
  • LangGraph高级教程:构建规划执行型智能体
  • 高动态范围成像
  • TSC TTP-244 打印机TSPL PUTBMP指令图片打印失败
  • 树莓派5实现串口通信教程
  • odoo 维护模块维护团队实践指南
  • Windows 操作系统 - 打开任务管理器的不同方式
  • 高保真组件库:获取验证码
  • C++中的RAII技术:资源获取即初始化
  • 3.4_1 流量控制、可靠传输与滑动窗口机制
  • COHERENT Chameleon™Ultra、Vision和Vision-S激光系统操作员手侧