我从串行端口获取字节,它代表我的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
我认为您应该使用struct模块并像这样解压缩二进制数据:
因为
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]
,这取决于数据类型。相关问题 更多 >
编程相关推荐