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

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. 文件读写时注意目标平台的字节序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔗理苦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值