C# 二进制编写器 ushort 字节顺序
C# binary writer ushort bytes order
我有一个用 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
编码,可以 'modify' BinaryWriter 的行为或者我必须创建我自己的实现?
编辑:服务器端数据包序列化程序:https://github.com/Adwelean/EmperadorServer/blob/master/source/vendor/cerealed/cerealiser.d
根据MSDN文档,BinaryWriter以little endian格式存储UInt16。所以可以有一个相反的写入字节顺序。
https://msdn.microsoft.com/en-us/library/8sh9zw1e(v=vs.110).aspx
我想你可以参考这篇post来了解作者如何使用big endian。
BinaryWriter Endian issue
我有一个用 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
编码,可以 'modify' BinaryWriter 的行为或者我必须创建我自己的实现?
编辑:服务器端数据包序列化程序:https://github.com/Adwelean/EmperadorServer/blob/master/source/vendor/cerealed/cerealiser.d
根据MSDN文档,BinaryWriter以little endian格式存储UInt16。所以可以有一个相反的写入字节顺序。
https://msdn.microsoft.com/en-us/library/8sh9zw1e(v=vs.110).aspx
我想你可以参考这篇post来了解作者如何使用big endian。
BinaryWriter Endian issue