从字符串中读取字节为浮点数

时间:2009-10-08 13:39:32

标签: python string byte

我有一个python webserver,其中小的二进制文件是POST:ed。发布的数据表示为字符串。我想检查这些字符串的内容。但要做到这一点,我需要将每4个字节转换为浮点数(小端)。你是怎么做到的?

3 个答案:

答案 0 :(得分:7)

您使用struct模块:

>>> import struct
>>> struct.unpack_from("f", "\43\a3\12\32")
(8.6198787687447256e-33,)

答案 1 :(得分:5)

虽然struct最适合解包“标量”二进制值的集合,但当你拥有的是一串又一串的4字节二进制浮点数时,array模块很理想。具体来说,它很简单:

import array
thefloats = array.array('f', thestring)

如果只有thestring的一部分包含4字节二进制浮点数的序列,则可以使用相应的字符串切片而不是整个字符串来构建该部分的数组。 array实例提供了list的大多数功能(加上方便的方法转换为/从字节串转换,如果需要,可以在little-endian和big-endian形式之间进行交换),但它的灵活性较低(只有浮点数可以在数组中)并且非常紧凑(可以占用比具有相同项目的列表少3-4倍的内存)。

答案 2 :(得分:1)

construct模块也可能是一种方便的方法。根据您的需求调整this example应该很容易:

# [U]nsigned, [L]ittle endian, 16 bit wide integer (parsing)
>>> ULInt16("foo").parse("\x01\x02")
513