2015-11-23 55 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

这也适用 - 我有点无法得到它早点工作。 –