Ruby преобразует шестнадцатеричное в целое число (16 бит подписано) - PullRequest
0 голосов
/ 12 февраля 2019

Я разрабатываю программное обеспечение для использования считывателя RFID с ruby ​​на рельсах и, после открытия сокета и получения тегов, я преобразую данные в шестнадцатеричные с помощью:

    while line = s.gets
      puts line.unpack('H*').to_s
    end

Затем я получаю "a55a0019833400393939393939303030303232 fd6f 02080d0a "для одного тега.

Руководство пользователя RFID-считывателя сообщает:

Примечание: RSSI выражается как код дополнения, всего 16 бит ,, что в 10 разреальная стоимость.Например, реальное значение составляет -65,7 дБм ,, тогда RSSI = fd6f

Я нашел онлайн калькуляторы (mathsinfun и calc.penjee.com), где я могу конвертировать fd6f в -675.

Я хотел бы знать, как я могу получить это преобразование в Ruby 2.3.1 для продолжения моего проекта.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 12 февраля 2019

s> является правильным символом распаковки для 16-разрядного беззнакового старшего порядкового номера, поэтому:

"\xfd\x6f".unpack('s>')[0] / 10.0

Результат:

-65.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...