从\ xff转换为0xff

时间:2014-02-25 15:02:24

标签: python binary hex binary-data

我正在从ADC读取二进制输入寄存器,我得到的输入是这样的: data = '\xff\xff\xff\xff' , 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,我该如何修复?

2 个答案:

答案 0 :(得分:4)

如果您正在寻找将\xff更改为0xff的方法,只需使用ordhex这样的功能

data = '\xff\xff\xff\xff'
data = map(hex, map(ord, data))
print data
# ['0xff', '0xff', '0xff', '0xff']

答案 1 :(得分:0)

您的twos_comp(val, bits)函数需要参数为整数。您可以直接获取整数,而无需先使用bytearray将输入转换为'0xff'字符串:

>>> data = '\xff\xff\xff\xff'
>>> b = bytearray(data)
>>> b[0] == 0xff
True