2014-08-28 37 views
1

我在我的問題上發現了很多其他線程,但沒有一個與我想要的完全匹配,或者我很難重新調整用途。結合四個字節並轉換爲浮點數

我正在使用一個名爲smbus.read_byte()的函數。根據文檔它返回一個長。如果我打印的內容返回,我得到一個數字從0到255

我想要做的就是執行四項讀取,然後結合這些信息產生浮動。所以65,203,96,66應該給25.422。

有大量的使用結構封裝的建議,但我有點困惑如何將結果合併成一個號碼,然後再轉換爲float。

回答

4
>>> data = [65, 203, 96, 66] 
>>> b = ''.join(chr(i) for i in data) 
>>> import struct 
>>> struct.unpack('>f', b) 
(25.422000885009766,) 

其分解時,join線將每個整數值爲字符字節然後將它們串聯在一起成一個字符串,這是什麼struct.unpack需要作爲輸入。測試表明你的字節是按照big-endian順序排列的,要求>的格式爲unpack

Python 3區分了字符串和字節字符串,所以上面顯示的join將不起作用。您可以使用struct而不是join的值組合成一個字節串,這兩個Python 2和3的工作原理:

b = struct.pack('4B', *data) 
+0

是有道理的,謝謝! – m121212 2014-08-28 22:45:46