gpt4 book ai didi

c# - BinaryReader - 读取单个 "BIT "?

转载 作者:行者123 更新时间:2023-11-30 14:00:58 26 4
gpt4 key购买 nike

案例:
再次尝试通过我的 NIC 捕获数据包,
我开发了 2 个扩展用于捕获可变位数

    public static string ReadBits ( this BinaryReader Key , int Value )
{
BitArray _BitArray = new BitArray ( Value );

for ( int Loop = 0 ; Loop > Value ; Loop++ )
{
/* Problem HERE ---> */ _BitArray [ Loop ] = Key . ReadBoolean ( );
}

return BitConverter . ToString ( _BitArray . ToByteArray ( ) );
}

public static byte [ ] ToByteArray ( this BitArray Key )
{
byte [ ] Value = new byte [ ( int ) Math . Ceiling ( ( double ) Key . Length / 8 ) ];
Key . CopyTo ( Value , 0 );
return Value;
}

问题:

_BitArray [ Loop ] = Key . ReadBoolean ( );  

因为我正在尝试读取单个位,但指的是 MSDN Documentation ,
它使流位置前进 1 BYTE 而不是 1 BIT !!!

Reads a Boolean value from the current stream and advances the current position of the stream by one byte.

问题:
我真的可以“仅”捕获 1 位并将流位置提前 1 位吗?
请给我建议解决方案或想法:)

问候,

最佳答案

不是,Stream定位是按byte步进的。您可以使用位定位编写自己的流实现。

class BitReader
{
int _bit;
byte _currentByte;
Stream _stream;
public BitReader(Stream stream)
{ _stream = stream; }

public bool? ReadBit(bool bigEndian = false)
{
if (_bit == 8 )
{

var r = _stream.ReadByte();
if (r== -1) return null;
_bit = 0;
_currentByte = (byte)r;
}
bool value;
if (!bigEndian)
value = (_currentByte & (1 << _bit)) > 0;
else
value = (_currentByte & (1 << (7-_bit))) > 0;

_bit++;
return value;
}
}

关于c# - BinaryReader - 读取单个 "BIT "?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9455790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com