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],它取决于数据类型.
| 归档时间: |
|
| 查看次数: |
41105 次 |
| 最近记录: |