2012-05-12 144 views

回答

1

编写一个小帮手方法,它使用移位运算符来获得一个字节输出,例如:

byte[] x = new[] {0x0F, 0xF0} 
result = x[0] << 4 | x[1] >> 4; 
从第5位的位置

回报8位0xFF

使用模运算%

+0

您是不是要x [0] << 4 | x[1] >> 4? – wsh8z

+0

是的,那是对的 – Martin

0

一个字节是最小对准你可以用标准的流读者在阅读你可以很容易地改变位置.NET

如果要读取位,则需要使用按位运算符和掩码来确定位是打开(1)还是关闭(0)。

但是,这意味着你可以使用布尔真/假来告诉一个字节的内容是什么。一种方法是将这些位读入布尔枚举。像这样的扩展方法的东西可以工作:

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和一个计数增加了扩展方法,如果你想,或者通过从调用方法的范围内。