Python - binascii.unhexlify 和 .decode( "hex" ) 返回 TypeError: 找到非十六进制数字



我已经广泛地搜索了这个问题,但找不到解决这个问题的帖子。我有一个从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()删除所有任何类型的前导和尾随空格。

相关内容

最新更新