我收到一个二进制字符串,表示一组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
答案 0 :(得分:2)
这有用吗?
t = <binary-string-returned-here>
result = (t[2..3] + t[0..1]).unpack('F')[0]