Считывание верхнего и нижнего фрагментов в байте

#php #byte #bit-manipulation #nibble

#php #байт #манипулирование битами #фрагмент

Вопрос:

Каков правильный способ обработки двух разных значений, хранящихся в одном байте данных. У меня есть байт, который содержит два фрагмента, каждый из которых содержит свои собственные данные. Я хочу прочитать верхний фрагмент и нижний фрагмент в их собственные переменные.

11110000 = Ограничение на старшие 4 бита для считывания $throttle , и оно должно быть значением от 0 до 15. 00001111 = Младший 4-битный тормоз, который необходимо считывать в $brake , и должен быть значением от 0 до 15.

Не забывайте, что водители могут одновременно нажимать на газ и тормоз, поэтому вы можете получить значение типа 11000111 . Я сам придумал решение для старших 4 битов, и это так же просто, как убрать младшие 4 бита с помощью >> оператора (сдвиг бита вправо) 4 раза. $Throttle = $ThrBrk >> 4 , но поскольку я не могу сделать это за один ход для младших четырех битов, это выглядит довольно плохо в моем исходном коде.

Ответ №1:

Используйте AND операторы для обоих и сдвиньте верхний фрагмент на четыре бита вправо.

 $brake = $value amp; 0x0F;
$throttle = ($value amp; 0xF0) >> 4;
  

Ответ №2:

Проверьте операторamp;, который является побитовым И. Чтобы получить первый (наименее значимый бит), сделайте это:

 $lsb = $bits amp; 1;
  

Итак, чтобы получить весь «фрагмент»:

 $break = $bits amp; 15;