2
我收到了表示一组32位浮点数的二进制字符串。从一系列16位MODBUS寄存器中报告,第一个寄存器代表较低位,第二个寄存器代表较高位。我能够以可怕的丑陋方式重新排列寄存器,然后解码为浮点数。我希望这样会更有吸引力,但是我没有完成任务。本质上,我将字符串解压缩为一个十六进制字符串数组,将其转换为字符串,将高位切片并将它们放在低位之前,然后将其转换为整数基数16,将其打包为32位整数,然后解包一个浮点数,然后选择数组中的第一个值。如果你原谅我,最后一句话让我需要哭泣。别无他法:我如何将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
它没有。返回的二进制字符串是我调试显示为[4f] [76] [43] [c0]的部分。忽略前导和尾随部分。 Rx(9字节):[02] [04] [4f] [76] [43] [c0] [0f] [5d] => 1.05342283266357e + 33 – markf 2011-01-23 17:27:33