如何从Byte获取位值?

时间:2016-11-11 05:04:12

标签: c#

我有一个字节说1个字节的8个元素..我怎么得到每个值的位?例如,我想要第16位,第17位,第18位......

    byte[] _byte = new byte[8];

5 个答案:

答案 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);
}