我在 c# 中有一个字节数组。我需要从可能不在字节边界上的位位置开始提取一定数量的字节。
问问题
459 次
2 回答
1
编写一个小辅助方法,它使用移位运算符来获取一个字节,例如
byte[] x = new[] {0x0F, 0xF0}
result = x[0] << 4 | x[1] >> 4;
从第 5 位位置返回 8 位0xFF
您可以使用模运算符轻松更改位置%
于 2012-05-12T12:19:25.190 回答
0
一个字节是您可以使用 .NET 中的标准流阅读器读取的最小对齐方式
如果要读取位,则需要使用位运算符和掩码来确定位是打开 (1) 还是关闭 (0)。
但是,这意味着您可以使用布尔值 true/false 来判断字节的内容是什么。一种方法是将这些位读入布尔枚举。像这种扩展方法这样的东西可以工作:
public static IEnumerable<bool> BitsToBools(IEnumerable<byte> input)
{
int readByte;
while((readByte = input.MoveNext()) >= 0)
{
for(int i = 7; i >= 0; i--) // read left to right
yield return ((readByte >> i) & 1) == 1;
}
}
如果需要,您可以向扩展方法添加 startIndex 和计数,或者从调用方法传入范围。
于 2012-05-12T13:32:04.227 回答