【发布时间】:2019-09-25 23:51:30
【问题描述】:
我正在开发一个 Python3 程序来处理来自雷达的数据。一般来说,雷达将数据(十六进制数字)发送到我电脑的一个端口,我使用套接字来监听那个端口。并使用下面的代码来接收 4 个字节的数据。
data = connection.recv(4)
print(data)
在测试我的程序时,雷达发送08 00 00 01 和程序打印b'\x08\x00\x00\x01'。我理解 '\x' 意味着字符旁边是一个十六进制数字,但我想从中获取像 [08, 00, 00, 01] 这样的数字或普通字符串。尝试了最明显的方法:
strData = data.decode()
print(strData.split('\x'))
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape 失败。
如果雷达发送08 0D 00 00,print(data) 将打印b'\x08\r\x00\x00',情况会变得更糟,这让我意识到字符串操作无法处理这个问题。
那么,将b'\x08\x00\x00\x01' 之类的字节转换为08 00 00 01 之类的数字的正确方法是什么。
字符串编码让我发狂 -.- 虽然我使用的是 Python3,但 Python2.7 中的解决方案也可以。提前致谢。
【问题讨论】:
-
您想要整数
8, ...、2 个字符的十六进制字符串"08", ...,还是只需要整数,即134217729?