我从UDP套接字接收的数据报消息中获得以下数据:
b'/13/raw\x00,ffffffffffffff\x00=\xca\x00\x00=[\x00\x00\xbf\x82H\x00B\x14\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00B;\x81\n\xbf\xbat4C-\xfd\xb0B\x87\xac\xd9\x00\x00\x00\x00E\xcd\xc0\x00I\xcc\xc1\xe0'
这是我的代码:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((IP, p))
print("Listening for UDP packets on {0}:{1} ...".format(IP, p))
while 1:
rawdata, _ = sock.recvfrom(1024)
print(rawdata)
如何将原始数据转换为浮动
两者都是不同的样品
多谢各位
每个浮点值是4字节的数据(通常……不总是……同样,您需要查阅文档以获取所需的p[ayload]
但是假设
/13/raw
对您来说足够简单,其余的就是您需要解码的如果我们假设
\x00
是某种定界符,那么剩下的bytestring如下所示我们可以看到有72个字符,这意味着18个浮点(18*4==72)
但是,您的预期输出似乎只有14个浮点数,这意味着16个字节是某种元数据(可能是校验和,或者是一些有效负载信息(预期的浮点数))
我们现在可以将其解压为浮动结构…但我没有得到您的“期望值” 所以其中一些可能是双精度的,或者不是4字节浮点的
floats = struct.unpack('18f',msgBytes)
现在您有了一个18个浮点的列表…但再次与您的预期输出不匹配,它可能与endianness或其他一些您需要进行额外处理的方法有关(例如,可能应该是int,它们通过除以100或其他什么变成浮点?)
[编辑]进一步调查我怀疑
ffffffffff\x00
是某种头或元数据 所以如果我们从然后用
struct.unpack('14f',myBytes)
解压它,我们得到了14个浮点数,正如预期的那样…一些浮点数与您的示例中的零相同…但其他浮点数不匹配所以我认为我们仍然没有足够的信息来回答这个问题,需要更多地了解数据源和其他东西
相关问题 更多 >
编程相关推荐