我正在开发一个解析器来接收 UDP 信息,解析它并存储它。为此,我使用 aBinaryReader
因为它主要是二进制信息。不过,其中一些将是字符串。MSDN对ReadString()
功能说:
从当前流中读取一个字符串。该字符串以长度为前缀,一次编码为一个整数七位。
我完全理解它,直到“一次七位”,我试图简单地忽略它,直到我开始测试。我正在创建自己的字节数组,然后将其放入 aMemoryStream
并尝试使用BinaryReader
. 这是我最初认为可行的方法:
byte[] data = new byte[] { 3, 0, 0, 0, (byte)'C', (byte)'a', (byte)'t', }
BinaryReader reader = new BinaryReader(new MemoryStream(data));
String str = reader.ReadString();
知道 anint
是 4 个字节(并且玩弄了足够长的时间以找出它BinaryReader
是 Little Endian)我将它传递给 3 的长度和相应的字母。然而str
最终持有\0\0\0
。如果我删除 3 个零并且只有
byte[] data = new byte[] { 3, (byte)'C', (byte)'a', (byte)'t', }
然后它会Cat
正确读取和存储。对我来说,这与文档说长度应该是整数相冲突。现在我开始认为它们只是表示没有小数位的数字而不是数据类型int
。这是否意味着 aBinaryReader
永远无法读取大于 127 个字符的字符串(因为 01111111 对应于文档的 7 位部分)?
我正在编写一个协议,并且需要在将我们的文档传递给我们的客户之前完全了解我所涉及的内容。