2016-02-24 111 views
-2

我寫了一個腳本,它從modbus通道讀取並返回字的元組(16位)。 我需要將它們翻譯成十進制數字,我該怎麼做? 我一直在審查'結構'python包,但是,我不知道如何使用它來實現這一點。編號: 我舉一個例子。按照文件,(43H,C8H)應翻譯成400(十進制)。將兩個16位字轉換爲浮點運算python

但是,modbus軟件包返回兩個整數的Python元組,如(1000,60450)。

BR,

+0

什麼是你的單詞對象的類型名稱?它是內置類型嗎? – Kevin

+0

用一個例子編輯。 –

+0

有一個鏈接指向(43H,C8H)應該翻譯成400的文檔嗎? – Kevin

回答

0

你沒有指定,所以我假設你將每個單詞存儲爲一個普通的整數。請諮詢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) 
+0

我試過用這段代碼來翻譯給定的例子,它不工作。 –

+0

奇怪,適合我。如果你遇到錯誤,你會得到什麼錯誤?如果你獲得的輸出與你期望的不同,你會得到什麼輸出,以及你期望得到什麼輸出? – Kevin

+0

這就是要點。按照問題給出的例子(編輯後),(43H,C8H)應該翻譯成400. 由於(43H,C8H)是(67,200),這不起作用,對吧? –