将字节转换为浮点格式

2024-09-27 19:19:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我从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)

如何将原始数据转换为浮动

这是我期望的数据类型: enter image description here

两者都是不同的样品

多谢各位


Tags: 数据ip消息rawsocketsockudpprint
1条回答
网友
1楼 · 发布于 2024-09-27 19:19:37

每个浮点值是4字节的数据(通常……不总是……同样,您需要查阅文档以获取所需的p[ayload]

但是假设/13/raw对您来说足够简单,其余的就是您需要解码的

如果我们假设\x00是某种定界符,那么剩下的bytestring如下所示

msgBytes = b',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'

我们可以看到有72个字符,这意味着18个浮点(18*4==72)

但是,您的预期输出似乎只有14个浮点数,这意味着16个字节是某种元数据(可能是校验和,或者是一些有效负载信息(预期的浮点数))

我们现在可以将其解压为浮动结构…但我没有得到您的“期望值” 所以其中一些可能是双精度的,或者不是4字节浮点的

floats = struct.unpack('18f',msgBytes)

现在您有了一个18个浮点的列表…但再次与您的预期输出不匹配,它可能与endianness或其他一些您需要进行额外处理的方法有关(例如,可能应该是int,它们通过除以100或其他什么变成浮点?)

[编辑]进一步调查我怀疑ffffffffff\x00是某种头或元数据 所以如果我们从

myBytes = b'=\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'

然后用struct.unpack('14f',myBytes)解压它,我们得到了14个浮点数,正如预期的那样…一些浮点数与您的示例中的零相同…但其他浮点数不匹配

(7.254942539348875e-41, 3.273012823123475e-41, 6.659058584274783e-39, 1.1762210642058864e-38, 0.0, 0.0, 0.0, 1.244453845292514e-32, 2.2792208653754642e-07, -1.84210369180704e-09, -6070301691478016.0, 0.0, 1.7706052095336117e-38, -1.1171693447134314e+20)

所以我认为我们仍然没有足够的信息来回答这个问题,需要更多地了解数据源和其他东西

相关问题 更多 >

    热门问题