[英]How to get bit values from byte array using shifting with 32 bit big endian mask in C#
[英]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.