У меня есть байт, скажем 1 байт элементов из 8 .. Как получить бит каждого значения? Например, я хочу 16-разрядное значение, 17 бит, 18 бит так далее ..Как получить значения бит из байта?
byte[] _byte = new byte[8];
У меня есть байт, скажем 1 байт элементов из 8 .. Как получить бит каждого значения? Например, я хочу 16-разрядное значение, 17 бит, 18 бит так далее ..Как получить значения бит из байта?
byte[] _byte = new byte[8];
Вы можете использовать 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
Если Вы желаете работать с битами вы можете использовать BitArray класс. Одна из перегрузок конструктора позволяет вам передать массив байтов. Также следует отметить, что бит будет представлен логическим с истинным представлением «1» и ложным «0».
Если вы хотите 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;
}
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
Вы не можете получить 17-й бит, у _byte есть только 8 бит ... – Radagast
у него есть 64 бита ... это байт размера 8 .. 8 * 8 = 64 знаете? –
@ArnaldoBadin Неверно – MickyD