我是 C# 中二进制的新手,对执行此操作的最佳方法有疑问。我有一个正在尝试通信的应用程序,它具有特定的二进制消息格式。它必须以 B8
十六进制代码开头,以 BB
十六进制代码结尾,中间是二进制消息。能够获取字节缓冲区并将其转换为消息以便轻松访问消息属性的最佳方法是什么?我会想象一个结构,但老实说我真的不知道。
编辑:
我不希望它以二进制形式存在的原因是我可以轻松地在我的应用程序中使用这些数据。例如,我想将表示命令类型的二进制位转换为枚举。像这样(只是代表我想做的事情):
struct CommandMessage
{
public CommandType Command { get; set; }
public object Data { get; set; }
}
enum CommandType
{
UserJoined,
MessageReceived
}
最佳答案
我建议使用 protobuf-net
对于 DTO
连载。
因此,定义一些实体,例如 Package
( CommandMessage
在你的样本中)有
public Command Command;
public byte[] Data;
(序列化为 protobuf
)
基于 Command
你将能够反序列化 Data
到混凝土DTO
使用 protobuf
输入.
如果您的消息应以特殊前缀开头,您可以在Package
中处理。以及。
另外,Package
应该处理将自身写入/读取二进制流或缓冲区(这是非常困难的)。
例如 package.WriteTo(buffer)
生产 [BB,Command,Data,B8]
.同样适用于 package.ReadFrom()
关于c# - 用于二进制消息序列化/反序列化的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848886/