【问题标题】:Python - binascii.unhexlify and .decode("hex") return TypeError: Non-hexadecimal digit foundPython - binascii.unhexlify 和 .decode("hex") 返回 TypeError: Non-hexadecimal digit found
【发布时间】:2019-03-14 14:24:27
【问题描述】:

我对此进行了广泛的搜索,但找不到解决此问题的帖子。我从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:找到非十六进制数字

如果我取消散列 #rxData = "4042" 它会返回 @S 这是我所期望的。

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

如果我只有

rxHEX = ser.readline()
print rxHEX
rxData = rxHEX[8:]
print rxData
I recieve

输出是

82001F014042
4042

【问题讨论】:

  • 如果你打印repr()?

标签: python


【解决方案1】:

因为您使用的是.readline(),所以您的字符串很可能在末尾包含换行符(或 CRLF 对)。因此,您应该尝试rxData = rxHEX[8:].strip()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2020-09-07
      相关资源
      最近更新 更多