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

时间:2012-08-06 09:57:04

标签: 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
  

ValueError:基数为16的int()的无效文字:'\ 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

我明白了:

  

channel8上的电压为:(28942,)

你可以解释我是如何得到这个价值的吗?它没有匹配任何东西:D

1 个答案:

答案 0 :(得分:9)

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

struct.unpack("h", x)

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

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

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

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