10

我从串行端口获取代表 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: 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

我明白了:

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

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

4

1 回答 1

12

我认为您应该使用struct模块并像这样解压缩二进制数据:

struct.unpack("h", x)

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

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

并返回一个具有未打包值的元组(在您的情况下只有一个 int)。

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

于 2012-08-06T09:59:03.447 回答