如何将32位二进制字符串转换为在ruby中浮动

时间:2011-01-23 16:50:49

标签: ruby

我收到一个二进制字符串,表示一组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 个答案:

答案 0 :(得分:2)

这有用吗?

t = <binary-string-returned-here>
result = (t[2..3] + t[0..1]).unpack('F')[0]