【问题标题】:Read bytes from string as floats从字符串中读取字节作为浮点数
【发布时间】:2009-10-08 13:39:32
【问题描述】:

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

【问题讨论】:

    标签: python string byte


    【解决方案1】:

    您使用struct 模块:

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

    【讨论】:

      【解决方案2】:

      虽然struct 最适合解压缩“标量”二进制值的集合,但当您拥有的是一个接一个地在字符串中的 4 字节二进制浮点序列时,array 模块是理想的。具体来说,很简单:

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

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

      【讨论】:

      • 哇,这非常简单而且功能强大。
      • @quano,很高兴能帮上忙!
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 2021-12-28
        相关资源
        最近更新 更多