如何从字节获取位值
本文关键字:获取 字节 | 更新日期: 2023-09-27 18:17:19
我有一个字节说 1 个字节的 8 元素。如何获取每个值的位?例如,我想要第 16 位值、第 17 位、第 18 位等。
byte[] _byte = new byte[8];
您可以使用 BitArray(( 构造函数 BitArray((Byte[]( 从字节数组中获取位数组。对位数组使用索引器获取所需的位。
var bits = new BitArray(_byte);
现在位 16 将是位[15];
您可以按照此示例了解如何获取所需位。
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);
}
您可以使用位数组
简单的方法。
使用示例:
答: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);
}