我寫了一個腳本,它從modbus通道讀取並返回字的元組(16位)。 我需要將它們翻譯成十進制數字,我該怎麼做? 我一直在審查'結構'python包,但是,我不知道如何使用它來實現這一點。編號: 我舉一個例子。按照文件,(43H,C8H)應翻譯成400(十進制)。將兩個16位字轉換爲浮點運算python
但是,modbus軟件包返回兩個整數的Python元組,如(1000,60450)。
BR,
我寫了一個腳本,它從modbus通道讀取並返回字的元組(16位)。 我需要將它們翻譯成十進制數字,我該怎麼做? 我一直在審查'結構'python包,但是,我不知道如何使用它來實現這一點。編號: 我舉一個例子。按照文件,(43H,C8H)應翻譯成400(十進制)。將兩個16位字轉換爲浮點運算python
但是,modbus軟件包返回兩個整數的Python元組,如(1000,60450)。
BR,
你沒有指定,所以我假設你將每個單詞存儲爲一個普通的整數。請諮詢format character table並選擇一個C型,其大小爲2個字節,並且適合您的文字。 「H」適用於未簽名的單詞。 pack
將這兩個整數轉換爲使用所選類型的字符串。然後unpack
那成浮動。
import struct
t = (123, 456)
packed_string = struct.pack("HH", *t)
unpacked_float = struct.unpack("f", packed_string)[0]
print unpacked_float
#result: 7.34690863652e-38
您可以以相同的方式顛倒過程 - 打包,然後解壓縮。
print struct.unpack("HH", struct.pack("f", unpacked_float))
#result: (123,456)
編輯:一個附加的例子。
>>> t = (1000, 60450)
>>> import struct
>>> packed_string = struct.pack("HH", *t)
>>> unpacked_float = struct.unpack("f", packed_string)[0]
>>> print unpacked_float
-7.83457718087e+26
>>> print struct.unpack("HH", struct.pack("f", unpacked_float))
(1000, 60450)
我試過用這段代碼來翻譯給定的例子,它不工作。 –
奇怪,適合我。如果你遇到錯誤,你會得到什麼錯誤?如果你獲得的輸出與你期望的不同,你會得到什麼輸出,以及你期望得到什麼輸出? – Kevin
這就是要點。按照問題給出的例子(編輯後),(43H,C8H)應該翻譯成400. 由於(43H,C8H)是(67,200),這不起作用,對吧? –
什麼是你的單詞對象的類型名稱?它是內置類型嗎? – Kevin
用一個例子編輯。 –
有一個鏈接指向(43H,C8H)應該翻譯成400的文檔嗎? – Kevin