Разбиение байта на биты - PullRequest
2 голосов
/ 10 марта 2012

У меня есть байтовый массив, т.е. от байта [0] до байта [2] .Я хочу сначала разбить байт [0] на 8 бит.Затем байты [1] и, наконец, байты [2].Под разбиением я имею в виду, что если byte [0] = 12345678, то я хочу разделить как переменную A = 8, переменную B = 7, переменную C = 6, переменную D = 5, ........ переменную H = 0,Как разбить байт и сохранить биты в переменные?Я хочу сделать это в JAVA

Ответы [ 2 ]

5 голосов
/ 10 марта 2012

ну, побитовые операции, кажется, почти то, о чем вы говорите.байт состоит из 8 битов, и поэтому он находится в диапазоне от 0 до 255. записанный в двоичном виде это от 00000000 до 11111111.

Побитовые операции - это те, которые в основном используют маски, чтобы получить как можно больше информациииз байта.

Скажем, например, у вас есть 1101 0011 байт (пробел добавлен только для видимости) = 211 (десятичный).Вы можете разделить это на 2 "переменные" b1 и b2 по полбайта каждая.таким образом, они будут охватывать диапазон от 0 до 15.

Как вы это сделаете, определив некоторые маски.Маска для получения вашего первого значения в полбайта будет 0000 1111. Вы берете свое значение 11010011 и применяете к нему побитовый оператор и (&).Так сказать байт b = 211;байтовая маска1 = 15;ИЛИ байт b = 0x11010011;байтовая маска1 = 0x00001111;тогда у вас есть переменная byte b1 = b & mask1;

Таким образом, применение этой операции приведет к b1 = 00000011 = 3;С байтом маски mask2 = 0x11110000;применив ту же операцию к b, вы получите байт b2 = mask2 & b = 0x11010000;

Теперь, разумеется, число b2 может оказаться слишком большим для вас.Все, что вам нужно сделать, если вы хотите получить значение 0x1101, это сдвинуть его вправо.Таким образом, b2 >> = 4;

Вы можете иметь свои маски в любой форме, но обычно они имеют десятичные числа в виде степеней 2 (так что вы можете взять любой бит из своего байта) или решитькакой диапазон вы хотите для своих переменных и сделайте маску «больше», например 0x00000011 или ox00001100.Эти 2 маски, соответственно, позволят вам получить 2 значения из байта, каждое из которых находится в диапазоне от 0 до 3, значения, которые можно поместить в 4 байта.

для получения дополнительной информации, просмотрите соответствующую вики .

Извините, значения немного вышли из строя (поскольку байт, кажется, изменяется от -128 до 127, но идея та же.

Второе редактирование (никогда не использовал побитовые операции самlol) ... нотация "0x" предназначена для шестнадцатеричных чисел. Так что вам действительно придется вычислить для себя, что на самом деле означает 01001111 ... довольно отстойно: | но это сработает.

2 голосов
/ 10 марта 2012
boolean a = (theByte & 0x1) != 0;
boolean b = (theByte & 0x2) != 0;
boolean c = (theByte & 0x4) != 0;
boolean d = (theByte & 0x8) != 0;
boolean e = (theByte & 0x10) != 0;
boolean f = (theByte & 0x20) != 0;
boolean g = (theByte & 0x40) != 0;
boolean h = (theByte & 0x80) != 0;
...