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