【问题标题】:C# binary writer ushort bytes orderC# 二进制写入器 ushort 字节顺序
【发布时间】:2015-07-12 14:51:24
【问题描述】:

我有一个用 D 编写的服务器端应用程序,而我的客户端应用程序是用 C# 编写的。我使用 BinaryWriter 在它们之间进行通信,但字节顺序有问题。

其实字节顺序是不一样的,例子:

C# 客户端:

MemoryStream ms = new MemoryStream();
BinaryWriter writer = new BinaryWriter(ms);
writer.Write((ushort)0x01);
writer.Write("test");

客户端输出:

[1, 0, 4, 116, 101, 115, 116]

服务器输出:

[0, 1, 0, 4, 116, 101, 115, 116]

对于客户端,前 2 个字节已反转,并且我的服务器应用程序中的字符串以 ushort 编码长度,可以“修改” BinaryWriter 的行为,或者我必须创建自己的实现?

编辑:服务器端数据包序列化器:https://github.com/Adwelean/EmperadorServer/blob/master/source/vendor/cerealed/cerealiser.d

【问题讨论】:

  • 它没有倒置。先加一个零
  • 如果我用服务器写一个 ushort,字节数组是 [0, 1],而客户端的字节数组是 [1, 0]
  • 我认为服务器使用大端顺序,客户端使用小端顺序...
  • @Adwelean 在该示例中再次添加了 0。在没有看到服务器代码的情况下,没有什么可以帮助您。您似乎意识到这 可能 是字节顺序问题。结束。
  • 我也这么认为,但为什么字符串没有恢复? ^^

标签: c# memorystream binarywriter bytestream


【解决方案1】:

根据 MSDN 文档,BinaryWriter 以 little endian 格式存储 UInt16。所以有可能有一个颠倒的写入字节顺序。

https://msdn.microsoft.com/en-us/library/8sh9zw1e(v=vs.110).aspx

我想你可以参考这篇文章来了解如何为作家使用大端。

BinaryWriter Endian issue

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 2015-02-17
    • 1970-01-01
    • 2018-09-24
    • 2016-09-30
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多