Чтение верхнего куска и нижнего куска в байте - PullRequest
1 голос
/ 06 мая 2011

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

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

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

Ответы [ 2 ]

6 голосов
/ 06 мая 2011

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

$brake = $value & 0x0F;
$throttle = ($value & 0xF0) >> 4;
1 голос
/ 06 мая 2011

Проверьте оператор & , который является побитовым AND.Чтобы получить первый (младший значащий бит), сделайте следующее:

$lsb = $bits & 1;

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

$break = $bits & 15;
...