如何解决如何测试一行数据是否为十六进制?
我正在处理GPS数据,通常GPS芯片返回如下一行:
b'$GNGGA,200121.00,5135.19146,N,00523.30483,E,1,05,1.89,-18.7,M,46.2,*55\r\n'
但是,有时芯片会返回“ None”值或像这样的十六进制字符串:
b'\x00\x00\xa6\x13I\x82b\x9a\x82b\xaa\xbab\x82\xb2\xc2b\x8a\xb2R\xba25\n'
我不确定这是否是故意的。我创建了以下python代码:
import machine
import time
mygps=machine.UART(1,baudrate=9600,rx=34,tx=12,timeout =10)
msg = mygps.readline()
index = 0
while index < 3:
msg = mygps.readline()
print(msg)
if msg is not None:
print(msg.decode('utf-8'))
time.sleep(1)
index +=1
我希望代码跳过GPS芯片返回的十六进制行。我的代码通过“不是不是”条件语句处理“无”问题,但是它似乎无法处理GPS芯片返回的十六进制行。每当GPS芯片返回时
十六进制的一行,它在逻辑测试“如果消息不是无”或此后的右行“ print(msg.decode('utf-8'))
”中失败
错误仅显示:UnicodeError
。
对我来说,有两种可能的解决方案:使python代码能够处理十六进制的行,或者进行逻辑测试,并跳过无行和十六进制行。两种解决方案都对我有用,但是我不知道如何解决。
也许熟悉编码解码和十六进制的人可以帮助我解决这个问题。请注意,当我在非常小的微控制器(ESP32)上运行代码时,最好使用python3 / micropython本机库来解决此问题。
解决方法
您需要做的就是将对print()
的调用包装在try-except块中:
while index < 3:
msg = mygps.readline()
print(msg)
if msg is not None:
try:
print(msg.decode('utf-8'))
except UnicodeError:
pass
time.sleep(1)
index += 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。