如何将十六进制字符串转换为整数?

时间:2014-10-18 15:28:34

标签: python raspberry-pi

我编写了以下代码,通过Raspberry PI上的串口发送和接收数据。

import serial
serial=serial.Serial("dev/ttyAMA0",
                baudrate=9600,
                stopbits=serial.STOPBITS_ONE,
                parity=serial.PARITY_NONE,
                bytesize=serial.EIGHTBITS,
                timeout=0.5)

 chuoi="\xAA\xOO\x03\x25\x26\x00\x00\xBB"
 while 1: 
    serial.write(chuoi)
    data=serial.readline()
    print int(data,16)

我收到以下错误:

ValueError: invalid literal for int() with base 16: '\xaa\x00\x02\x01\x83\x80\xbb'

如何将此十六进制字符串转换为整数?

2 个答案:

答案 0 :(得分:4)

您拥有的值是字节字符串,而不是十六进制。您可以将其编码为十六进制,然后将其解释为基数为16的数字。假设返回值被解释为一个数字,并且对格式没有任何了解,例如little endian vs big endian,并假设\xoo\x00的拼写错误。

from binascii import hexlify

data = serial.readline()
hex = hexlify(data)
num = int(hex, 16)

print(num)

答案 1 :(得分:0)

字符串chuoi中的第二个字节是\xOO - 它包含字母O而不是数字0.这会导致您的错误。