5

我是 C# 中的二进制新手,并且对执行此操作的最佳方法有疑问。我有一个我正在尝试通信的应用程序,它具有特定的二进制消息格式。它必须以十六进制代码开头,以B8十六进制代码结尾BB,中间是二进制消息。能够获取字节缓冲区并将其转换为消息以便轻松访问消息属性的最佳方法是什么?我会想象一个结构,但老实说,我真的不知道。

编辑:

我不希望它是二进制的原因是我可以在我的应用程序中轻松使用数据。例如,我想将表示命令类型的二进制位转换为枚举。像这样(只是我想做的一个表示):

struct CommandMessage
{
    public CommandType Command { get; set; }
    public object Data { get; set; }
}

enum CommandType
{
    UserJoined,
    MessageReceived
}
4

1 回答 1

1

我建议protobuf-net用于DTO序列化。

因此,定义一些实体,例如PackageCommandMessage在您的示例中)具有

public Command Command;

public byte[] Data;(用 序列化protobuf

基于您将Command能够使用.DataDTOprotobuf

如果您的消息应该以特殊前缀开头,您也可以处理它Package。此外,Package应该处理向/从二进制流或缓冲区写入/读取自身(这非常困难)。

例如package.WriteTo(buffer)生产[BB,Command,Data,B8]。相同的package.ReadFrom()

于 2013-04-06T09:09:33.453 回答