我已广泛搜索过此内容,但无法找到解决此问题的帖子。我有一个简单的字符串,我从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
答案 0 :(得分:2)
由于您正在使用.readline()
,因此您的字符串最有可能在末尾包含换行符(或CRLF对)。因此,您应该尝试rxData = rxHEX[8:].strip()
。
答案 1 :(得分:0)
readline
不会删除尾随换行符。使用rsHEX.rstrip('\r\n')
删除任何操作系统上的尾随换行符,或rsHEX.strip()
删除任何类型的所有前导和尾随空格。