簡體   English   中英

如何從字節獲取位值?

[英]How to get bit values from Byte?

我有一個字節說 1 個字節的元素 8 .. 我如何獲得每個值的位? 例如,我想要第 16 位值、第 17 位、第 18 位等等。

    byte[] _byte = new byte[8];

您可以使用BitArray()構造函數BitArray((Byte[])從字節數組中獲取位數組。在位數組上使用索引器來獲取所需的位。

var bits = new BitArray(_byte);

現在第 16 位將是位 [15];

您可以按照此示例了解如何獲得 require 位。

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]);

輸出:

在位上真存在 1,在位上假存在 0

第一個字節值 = 1 = 00000001(二進制)

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  

第二個字節值 = 3 = 00000011(二進制)

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  

第三個字節值 = 7 = 00000111(二進制)

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  

如果您想使用位,您可以使用BitArray類。 它的構造函數重載之一允許您傳入字節數組。 還要注意的是,該位將由一個布爾值表示,真正代表“1”和假“0”。

如果您想要字節數組中的第 X 位(我認為這至少是您的要求),您需要從數組中索引正確的字節,然后提取該位

public static Boolean GetBitX(byte[] bytes, int x) {
    var index = x/8;
    var bit = x-index*8;

    return (bytes[index] & (1<<bit)) != 0;
}
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

簡單的方法就可以了。

使用示例:

答:10101010

乙: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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM