C# 读取4位而不丢失信息

C# 读取4位而不丢失信息,c#,stream,bits,C#,Stream,Bits,我遇到了一个似乎无法解决的问题。 我有一种类型的文件“ASDF”,在它们的头文件中,我可以获得读取它们所需的信息。问题是其中一个“字段”只有4位长 那么,让我们这样说: 从第0位到第8位,它是当前节点的索引(我已经读过了) 从8到16,它是下一个节点的索引(也请阅读) 从第16位到第20位内容的长度(字符串等) 所以我的问题是,如果我试图用bytereader读取“长度”,我将丢失4位信息,或者“丢失4位”。有没有办法只读取4位?您应该在读取其他字节时读取此字节,然后应用0x0F位掩码 比如

我遇到了一个似乎无法解决的问题。 我有一种类型的文件“ASDF”,在它们的头文件中,我可以获得读取它们所需的信息。问题是其中一个“字段”只有4位长

那么,让我们这样说:

  • 从第0位到第8位,它是当前节点的索引(我已经读过了)
  • 从8到16,它是下一个节点的索引(也请阅读)
  • 从第16位到第20位内容的长度(字符串等)

所以我的问题是,如果我试图用bytereader读取“长度”,我将丢失4位信息,或者“丢失4位”。有没有办法只读取4位?

您应该在读取其他字节时读取此字节,然后应用0x0F位掩码

比如说

byte result = (byte)(byteRead & 0x0F);
这将保留结果中较低的四位

如果所需位为高位4,则可以应用移位运算符

byte result = (byte)((byteRead & 0x0F) >> 5);

您必须修改或包装bytereader以记住额外的四位,并在下次调用时返回它们(加上必要时从下一个字节读取的额外位,等等)。只是不要使用bytereader(这到底是什么)?我关心的是,在读取“字节”后,我的字段是从第20位开始的,而不是从第24位开始的。我是否可以转换一个streamreader或只读取4位?否则我将读取所有错误信息:/streamreader读取的是完整字节,而不是4位。读取后应用遮罩。streamreader已位于文件的第三个字节。