我正在从ADC读取二进制输入寄存器,im得到的输入是这样的: data = 'xffxffxffxff' , data[0] = 'xff'
我必须将该数据转换为 2 的补码数fix8_7(LSB 第 7 位中的固定二进制点),我正在使用此函数来做到这一点:
def twos_comp(val, bits):
# Compute the 2's compliment of int value val
if( (val&(1<<(bits-1))) != 0 ):
val = val - (1<<bits)
return val
def fix8_7(val):
# Take a signed int of 8 bit an pass it to fix8_7 (fixed binary point in 7th LSB)
val = val / 128.0
return val
使用它们的方法是:
val1 = twos_comp(int('0xff',16),len(val))
fix8_7(val1)
但是我收到一个错误,因为我需要输入是十六进制值,例如 0xff 或 ff no \xff,我该如何解决这个问题?
如果您正在寻找一种将xff
更改为0xff
的方法,您可以简单地使用这样的ord
和hex
函数
data = 'xffxffxffxff'
data = map(hex, map(ord, data))
print data
# ['0xff', '0xff', '0xff', '0xff']
您的twos_comp(val, bits)
函数期望参数为整数。您可以直接获取整数,而无需先使用 bytearray
将输入转换为'0xff'
字符串:
>>> data = 'xffxffxffxff'
>>> b = bytearray(data)
>>> b[0] == 0xff
True