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

2 投票
2 回答
8222 浏览
提问于 2025-04-28 06:58

我写了以下代码,用来在树莓派上通过串口发送和接收数据。

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)

撰写回答