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

时间:2016-11-03 04:25:14

标签: python

我已广泛搜索过此内容,但无法找到解决此问题的帖子。我有一个简单的字符串,我从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)还是#rxData = "4042",我都会收到

  

TypeError:找到非十六进制数字

如果我取消哈希rxHEX = ser.readline() print rxHEX rxData = rxHEX[8:] print rxData I recieve ,它会返回 @S ,这是我所期待的。

为什么它从调制解调器字符串收到的内容中起作用?

如果我只有

S3 bucket

输出

  

82001F014042
  4042

2 个答案:

答案 0 :(得分:2)

由于您正在使用.readline(),因此您的字符串最有可能在末尾包含换行符(或CRLF对)。因此,您应该尝试rxData = rxHEX[8:].strip()

答案 1 :(得分:0)

readline不会删除尾随换行符。使用rsHEX.rstrip('\r\n')删除任何操作系统上的尾随换行符,或rsHEX.strip()删除任何类型的所有前导和尾随空格。