Как мне преобразовать 32-битную двоичную строку в плавающую в ruby? - PullRequest
2 голосов
/ 23 января 2011

Я получаю двоичную строку, которая представляет группу 32-разрядных чисел с плавающей запятой. Он сообщается из серии пар 16-битных регистров MODBUS, в которой первый регистр представляет младшие биты, а второй регистр представляет старшие биты. Я могу ужасно уродливо переставить регистры, а затем расшифровать их до плавающего числа. Я бы хотел, чтобы это было немного более привлекательно, но я не справляюсь с этой задачей. По сути, я распаковываю строку в массив шестнадцатеричных строк, преобразую в строку, разрезаю старшие биты и помещаю их перед младшими битами, затем преобразую в целое число 16, упаковываю в 32-битное целое, распаковываю с плавающей точкой, затем выбирая первое значение в массиве. Извините, последнее предложение заставляет меня плакать. Без лишних слов:

def read_dual_input_registers(addr, npairs)
  @values = Array.new
  result = <binary-string-returned-here>.unpack('H*').to_s

  npairs.to_i.times do 
    register = result.slice!(4..7) + result.slice!(0..3)
    @values.push([register.to_i(16)].pack('L').unpack('F')[0])
  end
  @values
end

1 Ответ

2 голосов
/ 23 января 2011

Это работает?

t = <binary-string-returned-here>
result = (t[2..3] + t[0..1]).unpack('F')[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...