Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从字节中获取位值?_C# - Fatal编程技术网

C# 如何从字节中获取位值?

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

我有一个字节,比如说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);
    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);
}