我从串口获取字节,表示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
我明白了:
你可以解释我是如何得到这个价值的吗?它没有匹配任何东西:Dchannel8上的电压为:(28942,)
答案 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]
,这取决于数据类型。