字节数组&二进制读取 - 用于测试/开发的调试环境?

时间:2011-06-13 07:14:24

标签: c# bytearray

我(接近)对这个话题完全陌生,并在此阅读了很多内容。书籍,Stackexchange,博客等。你知道,开发人员的共同点。我觉得当你可以调试和测试你所读到的内容时,更容易实现“全局理解”。我找到了很多理论信息,但没有尝试“拔掉”的实用方法。

到目前为止,我的想法大致是这样的: byte[]BitConverter.GetBytes / BitConverter.ToInt32Encoding.UTF8.GetString()在这里与数组开始的某种位置密切相关。就好像数据报中的前4个字节包含一个msg一样,那么sessionin的startindex将是4?所有这些都是为了这个目的而感到沉重的东西。

有没有更好的方法来打包/解压缩这样的数组? 消息/数据报的大小最大为64kb,并且从不对不同的消息进行扩展。

  

更具体:我想模拟(控制台应用程序,即)a   传入数据包并解压缩对我有用的信息   系统。然后相反,将答案传回字节数组。   为此目的的样本类如何看待/处理?如何编码/   解码到它?协议规范具有固定的数据包字节。我会留下一个   下面的例子(虽然不是来自真实的规范);

// One Packet 
// 
// Description   -> |Identifier|name length|message length|    name   |    message   |
// Size in bytes -> |     4    |     4     |       4      |name length|message length|

2 个答案:

答案 0 :(得分:2)

在大多数情况下,您不会自己读取/写入二进制信息。有几个框架可以将类/结构序列化为二进制数据/从二进制数据序列化。 BinaryFormatterprotobuf有两种方式。

但是如果你想自己尝试一下,我建议你只使用FileStream,因为它与任何其他流完全一样(有点简化的陈述,但几乎是真的;)使用BinaryWriter来写信息和BinaryReader阅读。

没有理由直接处理byte[]数组。您随时可以使用MemoryStream初始化BinaryReader以获取对BinaryWriter// Description -> |Identifier|name length|message length| name | message | // Size in bytes -> | 4 | 4 | 4 |name length|message length| using (var stream = new MemoryStream(yourByteBuffer)) { using (reader = new BinaryReader(stream)) { var identifier = reader.ReadInt32(); var nameLength = reader.ReadInt32(); var msgLength = reader.ReadInt32(); var name = reader.ReadChars(nameLength); var msg = reader.ReadChars(msgLength); } } // to get a string from the chars: var message = new string(msg);

的访问权限

重要的是你以完全相同的顺序读/写字段。

更新

使用您更新的问题的示例:

{{1}}

答案 1 :(得分:0)

System.IO包含用于处理文件和字节流的类型。其中许多包括例子,例如。打开文件以读取字节流:FileStream Constructor (String, FileMode)