2015-11-23 113 views
0

我使用python作爲微控制器上的主要腳本語言。微控制器從I2C總線讀取兩個8位十六進制數字;例如:在Python中使用二進制補碼

out_L = C2 
out_H = F2 

這兩個都是在Python中作爲字符串接收的。 F2C2表示二進制補碼。我需要數字的十進制值。

我可以十六進制字符串轉換爲二進制字符串

bin_out = "0b" + (bin(int(hex_out, 16))[2:]).zfill(8) 

現在我必須將二進制值轉換爲十進制值,它是我在哪裏卡住了。我首先必須做兩個補碼轉換,然後轉換爲十進制。因爲二進制值仍然是一個字符串,我不能對它進行正常的二進制操作,也不能將它轉換爲十進制。請協助。我所有的努力,正確地將二進制字符串更改爲二進制值給我提供了不正確的值。

回答

1

你可能只是直接套用2的補到原來的int值:

out_L = "C2" 
out_H = "F2" 

hex_out = ''.join((out_H, out_L)) 
value = int(hex_out, 16) # value = 62146 
if value> 0x7FFF: 
    value -= 0x10000 

print value # output -3390 
+0

謝謝,它完美的作品! –

0

二進制轉換爲使用Python中十進制:

int(binary_number,2) 
+0

這也適用 - 我有點無法得到它早點工作。 –