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

2025-05-13 Unity 网络基础12——大小端模式

文章目录

  • 1 大小端模式
      • 1.1 定义
      • 1.2 存储示例
      • 1.3 大/小端原因
  • 2 大小端的影响
  • 3 大小端转换实践
  • 4 建议

1 大小端模式

1.1 定义

​ 大小端模式是计算机硬件存储数据的两种不同方式:

  • 大端模式(Big-Endian):数据的高字节保存在内存的低地址中,低字节保存在高地址中。
  • 小端模式(Little-Endian):数据的高字节保存在内存的高地址中,低字节保存在低地址中。

1.2 存储示例

​ 以十六进制数据0x11223344为例:

大端模式存储

地址: 0     1     2     3
数据: 0x11  0x22  0x33  0x44
(低地址→高地址)

小端模式存储

地址: 0     1     2     3
数据: 0x44  0x33  0x22  0x11
(低地址→高地址)

1.3 大/小端原因

  1. 计算机处理特性

    • 计算机电路处理低位字节效率更高。

    • 计算机按顺序读取字节,不关心高低位概念。

    • 小端模式更符合计算机处理逻辑。

  2. 人类阅读习惯

    • 大端模式更符合人类阅读习惯(从左到右,高位到低位)
  3. 实际应用场景

    • 操作系统:通常采用小端模式(如 Windows、Linux)。

    • 网络协议:规定使用大端模式(网络字节序)。

    • 不同平台:ARM、DSP 等处理器可能采用不同模式。

2 大小端的影响

  • TCP/IP 协议规定网络传输使用大端字节序。
  • 不同语言/平台通信时可能出现字节序不匹配。
  • 只有读取数据时需要区分大小端,写入时无需考虑。
通信组合是否需要转换原因
C# ↔ Java/Erlang/AS3需要C#小端,Java等大端
C# ↔ C++不需要都是小端模式

3 大小端转换实践

  1. 判断当前系统字节序
// C#判断大小端模式
print("是否是小端模式:" + BitConverter.IsLittleEndian);
  1. 使用系统 API 转换
// 本机字节序转网络字节序(小端→大端)
int i = 99;
byte[] bytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(i));// 网络字节序转本机字节序(大端→小端)
int receI = BitConverter.ToInt32(bytes, 0);
receI = IPAddress.NetworkToHostOrder(receI);
  1. 通用转换方法
// 手动反转字节数组
if(BitConverter.IsLittleEndian)Array.Reverse(bytes);

4 建议

最佳实践

  1. 统一规则:前后端约定统一字节序(通常前端适配后端)。
  2. 性能考虑:减少不必要的转换操作。
  3. 调试技巧:当通信数据异常时,首先检查字节序问题。

使用 Protobuf

  • Protobuf 已内置处理字节序问题。
  • 跨语言通信推荐使用 Protobuf 等序列化工具。

注意事项

  1. 发送数据前转换为网络字节序。
  2. 接收数据后转换为主机字节序。
  3. 文件读写时注意目标平台的字节序。

相关文章:

  • 项目中遇到的问题
  • WSL 安装 Debian 12 后,Linux 如何安装 vim ?
  • AI时代,如何实现人机共舞?
  • 计算机网络防火墙技术介绍:包过滤、应用代理网关、状态监测
  • c# 数据结构 树篇 入门树与二叉树的一切
  • 最大子段和(递推)
  • 物理:人的记忆是由基本粒子构成的吗?
  • 【AI News | 20250513】每日AI进展
  • Ubuntu 22.04搭建OpenStreeMap地址解析服务(保姆级教程)
  • 跨境电商定价革命:亚马逊“逆向提价“策略背后的价值重构逻辑
  • Readiris PDF:高效文档管理与OCR识别工具
  • CMake基础
  • Linux上的rm和srm 命令
  • Springboot实现重试机制
  • ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言
  • 从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt
  • 鸿蒙 PC 发布之后,想在技术上聊聊它的未来可能
  • talk-linux 不同用户之间终端通信
  • 攻防靶场——没有Web怎么打
  • 关于maven的依赖下不下来的问题
  • 文学花边|对话《借命而生》原著作者石一枫:我给剧打90分
  • 上海与世界|环城生态公园带是上海绿色发展新名片
  • 农林生物安全全国重点实验室启动建设,聚焦重大有害生物防控等
  • 浙江首个核酸药谷落子杭州,欢迎订阅《浪尖周报》第23期
  • 马克龙称法英正与乌克兰商议“在乌部署欧洲军队”
  • 富家罹盗与财富迷思:《西游记》与《蜃楼志》中的强盗案