如何解决字节数组和二进制读取-用于测试/开发的调试环境?
| 我(几乎)是该主题的新手,并且对此进行了很多阅读。书籍,Stackexchange,博客等。您知道,这对开发人员来说很常见。当您可以调试和测试所学内容时,我认为更容易实现“全面了解”。我发现了很多理论信息,但很少尝试“拔出插头”的实用方法。 到目前为止,我的想法大概是这样的:byte[]
,BitConverter.GetBytes
/BitConverter.ToInt32
,Encoding.UTF8.GetString()
在这里与数组开始的某种位置密切相关。就像数据报中的前4个字节包含msg一样,sessionid的startindex会变成4吗?所有这些都感觉很沉重。
有没有更好的方法来打包/解包这样的数组?
消息/数据报的最大大小为64kb,并且不会扩展到其他消息中。
更具体地说:我想模拟(即控制台应用程序)
传入数据包并解压缩到对我有用的信息
系统。然后相反,将答案传送回字节数组。
一个好的样本类别如何看起来/被处理?如何编码/
解码成吗?协议规范对数据包有固定的字节。我会离开
下面的例子(虽然不是真实的规范);
// One Packet
//
// Description -> |Identifier|name length|message length| name | message |
// Size in bytes -> | 4 | 4 | 4 |name length|message length|
解决方法
在大多数情况下,您自己不会读取/写入二进制信息。有几种框架可以将类/结构与二进制数据串行化。
BinaryFormatter
或protobuf是两种方式。
但是,如果您想自己尝试一下,我建议您只使用FileStream
,因为它与任何其他流完全一样(有点简化的语句,但是几乎是正确的;)使用Use7ѭ编写信息,并使用BinaryReader
进行读取。
没有理由直接处理“ 0”数组。您始终可以使用初始化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);
, ѭ14包含用于处理文件和字节流的类型。其中许多包括示例,例如。打开一个文件读取为字节流:FileStream构造函数(String,FileMode)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。