繁体   English   中英

我如何将像 b'\\x08\\x00\\x00\\x00' 这样的 Python/socket 读取的雷达数据解码为数字

[英]How do I decode radar data read by Python/socket like b'\x08\x00\x00\x00' to numbers

我正在开发一个 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失败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 中的解决方案也可以。 提前致谢。

我猜你已经得到了二进制数据。 如果你真的想要十六进制表示作为一个字符串,这个对类似问题的回答可以帮助你。

如果您想将数据解释为例如浮点数,则可以使用结构

import struct
x = struct.unpack('f',data)

对于这种特定情况 - 您有一个字节字符串,并且您希望将每个字节转换为其等效的整数 - 您可以将字节字符串直接转换为列表。

>>> bs = b'\x08\x00\x00\x01'
>>> ints = list(bs)
>>> ints
[8, 0, 0, 1]

这有效,因为

bytes 对象实际上表现得像不可变的整数序列

所以

[对于]一个字节对象 b,b[0] 将是一个整数,而 b[0:1] 将是一个长度为 1 的字节对象。(这与文本字符串形成对比,其中索引和切片都会产生一个字符串长度 1)

(从bytes类型的文档引用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM