ValueError:无效文字为int()与基地16:'\ x0e \ xa3'Python
问题描述:
我从串行端口获取字节,代表我的PIC板上的电压。 但我不能将这些字节(字符串)转换为十进制,因为我得到上面的错误消息。 下面是函数(事实上,它与Tkinter的按钮关联)ValueError:无效文字为int()与基地16:' x0e xa3'Python
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模块并解压你这样的二进制数据:
struct.unpack("h", x)
因为int
是不是真的用二进制数据,但像十六进制字符串:EF1D
。
当你做x=ser.read(2)
您收到的二进制数据的两个字节,存在通过struct
库支持两种类型的数字表示的:short
(h)和unsigned short
(H)。功能struct.unpack
接收两个参数:
- 结构规范(的format characters字符串)
- 二进制数据
并返回与解压后的值(仅在您的情况下,一个INT)的元组。
因此,您需要将字符串w=int(x, 16)
更改为w = struct.unpack("h", x)[0]
或更改为w = struct.unpack("H", x)[0]
,这取决于数据类型。
示例int *可以*为无符号(''H'),值为41742或有符号,值为-23794 .. – 2012-08-06 10:06:31
感谢您的回答,请问您能解释更多吗?我是一个开始:) – safsaf88 2012-08-06 10:10:36
当然,我添加一些更多的解释。 – 2012-08-06 10:19:42