【发布时间】:2020-10-21 00:43:46
【问题描述】:
我正在开展一个项目,我们希望从通用机器人中获取一些数据,例如位置和力数据,然后将这些数据存储在文本文件中以供以后参考。我们可以很好地接收数据,但将其转换为可读坐标是一个问题。下面是一个示例数据字符串:
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x80\xbf\x00\x00\x80\ xbf\x00\x00\x80\xbf\x00\x00\x80\xbf\x00\x00\x80\xbf\x00\x00\xc0?\x00\x00\x16C\x00\x00\xc0?\x00\x00\ x16C\x00\x00\x00?\xcd\xcc\xcc>\x00\x00\x96C\x00\x00\xc8A\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x88\xfb\x7f?\xd0M>i\x19T\ xc2>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\xdb\x0f\xc9@\xa7\xdcU@\xa7\xdcU@\xa7\xdcU@\xa7\xdcU@\xa7 \xdcU@\xa7\xdcU@\xfe\xff\xff\xff\xfe\xff\xff\xff\xfe\xff\xff\xff\xfe\xff\xff\xff\xfe\xff\xff\xff\xff \xff\xff\xff\xec b\xc7@\xecb\xc7@\xecb\xc7@\
*没有收到整个字符串
一开始我以为是十六进制,所以我尝试了代码:
packet_12 = packet_12.encode('hex')
x = str(packet_12)
x = struct.unpack('!d', packet_12.decode('hex'))[0]
all_data.write("X=", x * 1000)
但无济于事。我使用编解码器和 .encode 尝试了几种不同的解码方法,但都没有奏效。我在另一篇文章中发现了以下两个代码块:
y = codecs.decode(packet_12, 'utf-8', errors='ignore')
packet_12 = s.recv(8)
z = str(packet_12)
x = ''.join('%02x' % ord(c) for c in packet_12)
这两种方法都不适用于我的应用程序。最后,我尝试将整个字符串保存在一个 .txt 文件中,然后用 python 打开它并使用下面的代码对其进行解码,但似乎什么也没发生。
with io.open('C:\\Users\\myuser\\Desktop\\decode.txt', 'r', encoding='utf8') as f:
text = f.read()
with io.open('C:\\Users\\myuser\\Desktop\\decode', 'w', encoding='utf8') as f:
f.write(text)
我知道我可能会遗漏一些非常简单的东西,例如使用错误的解码类型,或者我什至可能会在机器人输出中出现乱码,但我们非常感谢任何帮助。
【问题讨论】:
-
它看起来像二进制数据,所以结构模块可能是要走的路。但是您需要知道要发送的数据的格式才能正确解包;理想情况下,此信息应在产品文档中找到。
标签: python python-3.x decode robot