ValueError:int()的无效文字,基数为16:'\ x0e\xa3'Python

saf*_*f88 4 python string tkinter decimal pyserial

我从串口获取字节,表示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
Run Code Online (Sandbox Code Playgroud)

ValueError:int()的基数为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
Run Code Online (Sandbox Code Playgroud)

我得到这个:

通道8上的电压为:(28942,)

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

Fed*_*lev 10

我认为你应该使用struct module并解压缩二进制数据,如下所示:

struct.unpack("h", x)
Run Code Online (Sandbox Code Playgroud)

因为int不是真正使用二进制数据,而是使用十六进制字符串,如:EF1D.

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

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

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

  • 示例int*可以是*无符号("H"),值41742或有符号值-23794. (2认同)