如果我取一个 uint 值 = 2921803 (0x2C954B),它实际上是一个 4 字节包 (4B 95 2C 00),并且我想使用 bitarray 获取它的字节版本的 16 个最低有效位,我将如何去做?
这就是我尝试这样做的方式:
byte[] bytes = BitConverter.GetBytes(value); //4B 95 2C 00 - bytes are moved around
BitArray bitArray = new BitArray(bytes); //entry [0] shows value for 1101 0010 (bits are reversed)
在这一点上,我都转过身来。我确实试过这个:
byte[] bytes = BitConverter.GetBytes(value);
Array.Reverse(bytes);
BitArray bitArray = new BitArray(bytes);
这给了我所有的信息,但完全相反,从 [31] 读取到 [0]。最终,我期待/希望得到 19349 (4B 95) 作为我的答案。
这就是我希望实现该功能的方式:
private uint GetValue(uint value, int bitsToGrab, int bitsToMoveOver)
{
byte[] bytes = BitConverter.GetBytes(value);
BitArray bitArray = new BitArray(bytes);
uint outputMask = (uint)(1 << (bitsToGrab - 1));
//now that i have all the bits, i can offset, and grab the ones i want
for (int i = bitsToMoveOver; i < bitsToGrab; i++)
{
if ((Convert.ToByte(bitArray[i]) & 1) > 0)
{
outputVal |= outputMask;
}
outputMask >>= 1;
}
}