Python 值错误: 无效文字为int() 十六进制基数: '\x0e\xa3'

2024-04-24 07:03:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我从串行端口获取字节,它代表我的PIC板上的电压。 但是我无法将这些字节(字符串)转换为十进制,因为我得到了上面的错误消息。 这是函数(事实上,它与tkinter按钮相关)

def channel8():
    ser.write(chr(0xFF))
    print "you have select channel8"
    x=ser.read(2)
    w=int(x, 16)
    print w
    print "Voltage on channel8 is:" , x

ValueError: invalid literal for int() with base 16: '\x0e\xa3'

def channel8():
    ser.write(chr(0xFF))
    print "you have select channel8"
    x=ser.read(2)
    z=struct.unpack("h", x)
    #w=int(z, 16)
    print z

我明白了:

Voltage on channel8 is: (28942,)

你能解释一下我是怎么得到这个价值的吗?它与任何东西都不匹配:D


Tags: youread字节isondefhaveselect
1条回答
网友
1楼 · 发布于 2024-04-24 07:03:46

我认为您应该使用struct模块并像这样解压缩二进制数据:

struct.unpack("h", x)

因为int实际上不是用于处理二进制数据,而是用于诸如:EF1D之类的十六进制字符串。

当您收到两个字节的二进制数据时,x=ser.read(2)库支持两种类型的数字表示:struct(h)和unsigned short(h)。函数struct.unpack接收两个参数:

并返回一个带解包值的元组(在您的情况下只有一个int)。

所以需要将字符串w=int(x, 16)更改为w = struct.unpack("h", x)[0]w = struct.unpack("H", x)[0],这取决于数据类型。

相关问题 更多 >