C# 如何从字节中获取位值?
我有一个字节,比如说1字节的元素8。。如何获取每个值的位?例如,我想要第16位值,第17位,第18位,依此类推C# 如何从字节中获取位值?,c#,C#,我有一个字节,比如说1字节的元素8。。如何获取每个值的位?例如,我想要第16位值,第17位,第18位,依此类推 byte[] _byte = new byte[8]; 您可以使用构造函数从字节数组中获取位数组。使用位数组上的索引器获取所需位 var bits = new BitArray(_byte); 现在,位16将是位[15] 您可以按照此示例了解如何获得所需位 byte[] _byte = new byte[3] {1,3,7}; var bits = new BitArray
byte[] _byte = new byte[8];
您可以使用构造函数从字节数组中获取位数组。使用位数组上的索引器获取所需位
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]);
第二字节值=3=00000011(二进制)
第三字节值=7=00000111(二进制)
如果你想使用bits,你可以使用这个类。它的一个构造函数重载允许您传入字节数组。还要注意的是,该位将由一个布尔值表示,该布尔值的true REPENTING“1”和false“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;
}
公共静态布尔GetBitX(字节[]字节,整数x){
var指数=x/8;
var位=x指数*8;
返回(字节[索引]&(1
您可以使用简单的方法来实现它
示例用法:
A:10101010
B:1
从A得到第四位,得到B
getBit(A,4)
你不能得到第17位,_字节只有8位…它有64位…它是大小为8的字节..8*8=64知道吗?@arnaldbadin Incorrectok,对不起,我看到的是位(想想位数组),不是字节。没有“大小为8的字节”这样的东西一个字节是一个有8位的单位。你可以说一个有16位的short
,一个有32位的int
,或者一个有64位的long
。
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
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
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);
}
//gets n'th bit from a byte, returns as an int
int getBit(byte b, int bitNumber) {
return ((b >> bitNumber) & 0x01);
}