将字节转换为浮点格式

Converting Bytes to float format

我从 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 是某种定界符,我们将得到如下字节串

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 个浮点数的列表......但同样与你的预期输出不匹配,它可能与字节顺序或你需要进行额外处理的其他方法有关(例如它应该是整数和它们通过除以 100 或其他东西变成浮点数?)

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

开始
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)

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