2016-11-11 2 views
-2

У меня есть байт, скажем 1 байт элементов из 8 .. Как получить бит каждого значения? Например, я хочу 16-разрядное значение, 17 бит, 18 бит так далее ..Как получить значения бит из байта?

byte[] _byte = new byte[8]; 
+0

Вы не можете получить 17-й бит, у _byte есть только 8 бит ... – Radagast

+1

у него есть 64 бита ... это байт размера 8 .. 8 * 8 = 64 знаете? –

+0

@ArnaldoBadin Неверно – MickyD

ответ

3

Вы можете использовать BitArray() конструктор BitArray((Byte[]), чтобы получить биты массива из массива байтов. Используйте indexer для битового массива, чтобы получить требуемый бит.

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 (Binary)

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 
1

Если Вы желаете работать с битами вы можете использовать BitArray класс. Одна из перегрузок конструктора позволяет вам передать массив байтов. Также следует отметить, что бит будет представлен логическим с истинным представлением «1» и ложным «0».

1

Если вы хотите XTH бита в вашем Byte Array (я думаю, что это то, что ваши прошу, по крайней мере), необходимо индексировать правильные байты из массива, а затем извлечь битовом

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

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

Смежные вопросы