我是C#中的二元新手,对最佳方法有疑问。我有一个我正在尝试通信的应用程序,它具有特定的二进制消息格式。它必须以B8
十六进制代码开头,并以BB
十六进制代码结尾,其间包含二进制消息。能够获取字节缓冲区并将其转换为消息以便于访问消息属性的最佳方法是什么?我想象一个结构,但说实话,我真的不知道。
编辑:
我不希望它在二进制文件中的原因是我可以轻松使用我的应用程序中的数据。例如,我想将表示命令类型的二进制位转换为枚举。像这样(只是我想做的事情的代表):
struct CommandMessage
{
public CommandType Command { get; set; }
public object Data { get; set; }
}
enum CommandType
{
UserJoined,
MessageReceived
}
答案 0 :(得分:1)
我建议将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()