【发布时间】:2009-10-08 13:39:32
【问题描述】:
我有一个 python 网络服务器,其中小型二进制文件是 POST:ed。发布的数据以字符串表示。我想检查这些字符串的内容。但要做到这一点,我需要将每 4 个字节转换为浮点数(小端序)。你是怎么做到的?
【问题讨论】:
我有一个 python 网络服务器,其中小型二进制文件是 POST:ed。发布的数据以字符串表示。我想检查这些字符串的内容。但要做到这一点,我需要将每 4 个字节转换为浮点数(小端序)。你是怎么做到的?
【问题讨论】:
您使用struct 模块:
>>> import struct
>>> struct.unpack_from("f", "\43\a3\12\32")
(8.6198787687447256e-33,)
【讨论】:
虽然struct 最适合解压缩“标量”二进制值的集合,但当您拥有的是一个接一个地在字符串中的 4 字节二进制浮点序列时,array 模块是理想的。具体来说,很简单:
import array
thefloats = array.array('f', thestring)
如果只有thestring 的一部分包含 4 字节二进制浮点数序列,则可以使用字符串的适当切片而不是整个字符串从该部分构建数组。 array 实例提供了list 的大部分功能(加上方便的方法来转换/从字节字符串转换,并在需要时在小端和大端形式之间进行交换),但它不太灵活(只有浮点数可以在数组中)并且更加紧凑(与具有相同项目的列表相比,占用的内存要少 3-4 倍)。
【讨论】:
construct 模块也可能是一种方便的方法。 this example 应该很容易适应您的需求:
# [U]nsigned, [L]ittle endian, 16 bit wide integer (parsing)
>>> ULInt16("foo").parse("\x01\x02")
513
【讨论】: