我有一个字节说1个字节的8个元素..我怎么得到每个值的位?例如,我想要第16位,第17位,第18位......
byte[] _byte = new byte[8];
答案 0 :(得分:3)
您可以使用BitArray()构造函数BitArray((Byte[])从字节数组中获取位数组。使用位数组上的索引器来获取所需的位。
byte[] _byte = new byte[3] {1,3,7};
var bits = new BitArray(_byte);
for(int i=0; i < bits.Length; i++)
Console.WriteLine(bits[i]);
现在位16将是位[15];
您可以按照此示例了解如何获取require位。
True = 1 0 bit index
False = 0 1 bit index
False = 0 2 bit index
False = 0 3 bit index
False = 0 4 bit index
False = 0 5 bit index
False = 0 6 bit index
False = 0 7 bit index
输出:
真位1位,位0位
第一个字节值= 1 = 00000001(二进制)
True = 1 8 bit index
True = 1 9 bit index
False = 0 10 bit index
False = 0 11 bit index
False = 0 12 bit index
False = 0 13 bit index
False = 0 14 bit index
False = 0 15 bit index
第二个字节值= 3 = 00000011(二进制)
True = 1 16 bit index
True = 1 17 bit index
True = 1 18 bit index
False = 0 19 bit index
False = 0 20 bit index
False = 0 21 bit index
False = 0 22 bit index
False = 0 23 bit index
第三字节值= 7 = 00000111(二进制)
{{1}}
答案 1 :(得分:1)
如果您想使用位,可以使用BitArray类。它的一个构造函数重载允许您传入一个字节数组。另外需要注意的是,该位将由一个布尔表示,其中true表示'1'而错误为'0'。
答案 2 :(得分:1)
如果你想要你的字节数组中的第X位(我认为这至少是你的要求),你需要从数组索引正确的字节然后提取位
public static Boolean GetBitX(byte[] bytes, int x) {
var index = x/8;
var bit = x-index*8;
return (bytes[index] & (1<<bit)) != 0;
}
答案 3 :(得分:1)
public static Boolean GetBitX(byte[] bytes, int x) {
var index = x/8;
System.Collections.BitArray ba = new BitArray(new byte[]{bytes[index]});
return ba.Get(x);
}
您可以使用BitArray
答案 4 :(得分:0)
简单的方法。
示例用法:
A:10101010
B:1
从A获得第4位,所以得到B
getBit(A,4);
//gets n'th bit from a byte, returns as an int
int getBit(byte b, int bitNumber) {
return ((b >> bitNumber) & 0x01);
}