c# - 用于二进制消息序列化/反序列化的结构

标签 c# binary

我是 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/

相关文章:

c# - ASP.NET 按钮单击事件错误

c# - 如何定义数据类型?

c# - Global.asax.cs 文件在哪里?

c++ - 在二进制字符串的数字之间留出空间

binary - 如何将 "hello world"写入二进制?

c# - 从数据库检索数据但没有值时如何获取错误消息

c# - 将 C 结构与 union 编码到 C# 代码时获取垃圾数据

arrays - 在 Matlab 中反转一个逻辑位

javascript - 来自 JavaScript 二进制字符串的 Blob

algorithm - 计算二进制数的底数对数