C# 二进制消息序列化/反序列化的结构

C# 二进制消息序列化/反序列化的结构,c#,binary,C#,Binary,我对C#中的二进制代码还不熟悉,我有一个问题,那就是最好的方法。我有一个应用程序,我正试图沟通,有一个特定的二进制消息格式。它必须以B8hex码开始,以BBhex码结束,中间有二进制消息。获取字节缓冲区并将其强制转换为消息以便轻松访问消息属性的最佳方式是什么?我会想象一个结构,但老实说我真的不知道 编辑: 我不希望它以二进制形式出现的原因是,我可以轻松地在我的应用程序中使用数据。例如,我想将表示命令类型的二进制位转换为枚举。像这样(只是表示我想做的事情): 我建议使用forDTO序列化 因此,定

我对C#中的二进制代码还不熟悉,我有一个问题,那就是最好的方法。我有一个应用程序,我正试图沟通,有一个特定的二进制消息格式。它必须以
B8
hex码开始,以
BB
hex码结束,中间有二进制消息。获取字节缓冲区并将其强制转换为消息以便轻松访问消息属性的最佳方式是什么?我会想象一个结构,但老实说我真的不知道

编辑:

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

我建议使用for
DTO
序列化

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

public Command Command;
公共字节[]数据(用
protobuf
序列化)

基于
命令
您将能够使用
protobuf
数据
反序列化为具体的
DTO
类型

如果您的邮件以特殊前缀开头,您也可以在
包中处理此问题。
另外,
应该处理向二进制流或缓冲区写入/读取自身的操作(这是非常简单的)


e、 g
package.WriteTo(buffer)
产生
[BB,命令,数据,B8]
。同样适用于
package.ReadFrom()

这一点非常不清楚。你能举一个你想做什么的例子吗?为什么需要这个二进制消息?你用它做什么?为什么您希望C#表示不是字节[]
?要回答这个问题,我们需要确切地了解消息是如何在字节[]中布局的,也就是说,它可以作为结构进行逻辑解包(坦白地说,我并不建议这样做)。特别是,任何
字符串
内容都将表示“否”。您还需要了解任何数据的尾数等。此外:在二进制中,
BB
/
B8
-如果
BB
B8
在float/int/string/guid/etc中自然发生,您打算怎么做?该示例没有解释“特定的二进制消息格式”,也没有解释你在BB/B8问题上做了什么。“特定二进制消息格式”是否已定义?或者你可以自由选择自己的布局吗;它已经被定义了,但是你还没有告诉我们这个定义是什么。那么,我们如何判断您是否可以将其直接映射到结构,或者建议最佳的前进路线呢?“细节在这里真的很重要。”MarcGravel,据我从评论中了解,它应该是有效的。让我解释一下:DTO是用protobuf序列化的,但是包(围绕DTO+命令的包装器)处理所有读/写逻辑。假设我们有package.WriteTo(…),它写[BB,Command,Data(序列化DTO),B8]。同样的阅读方法。直到你在有效载荷中得到一个自然出现的B8
public Command Command;