如何将十六进制字符串转换为整数?
我写了以下代码,用来在树莓派上通过串口发送和接收数据。
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
字符串 chuoi 中的第二个字节是 \xOO
- 这里的字母是 O
,而不是数字 0。这就是导致你出错的原因。
4
你手上的值是一个字节串,而不是十六进制。你可以把它转换成十六进制,然后把它当作一个16进制的数字来理解。假设返回的值是要作为一个数字来解读的,并且我们对格式一无所知,比如说小端和大端的区别,同时假设\xoo
是个打错的地方,应该是\x00
。
from binascii import hexlify
data = serial.readline()
hex = hexlify(data)
num = int(hex, 16)
print(num)