#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;