我已经广泛地搜索了这个问题,但找不到解决这个问题的帖子。我有一个从82001B014042
调制解调器接收到的简单字符串。我想忽略82001B01
前面的头,解码十六进制数字4042
。我的代码如下:
rxHEX = ser.readline()
print rxHEX #82001B014042
rxData = rxHEX[8:] #4042
print rxData
#rxData = "4042"
rxData = rxData.decode("hex")
#rxData = binascii.unhexlify(rxData)
print rxData
无论我使用.decode("hex")
还是binascii.unhexlify(rxData)
,我都收到
TypeError: non -十六进制数字found
如果我反哈希#rxData = "4042"
,它返回@S,这是我所期望的。
为什么从调制解调器字符串接收到的内容不能工作?
如果只有
rxHEX = ser.readline()
print rxHEX
rxData = rxHEX[8:]
print rxData
I recieve
输出为
82001 f014042
4042
因为您使用的是.readline()
,所以您的字符串很可能在末尾包含一个换行符(或CRLF对)。因此,您应该尝试rxData = rxHEX[8:].strip()
.
readline
不去掉尾随换行符。使用rsHEX.rstrip('rn')
在任何操作系统上删除尾随换行符,或使用rsHEX.strip()
删除所有任何类型的前导和尾随空格。