【问题标题】:Packing integers and floats to bytearray for sending over socket将整数和浮点数打包到字节数组以通过套接字发送
【发布时间】:2019-03-15 03:46:08
【问题描述】:

我想使用 Socket 将 bytearray 从 Python 传输到我的 C 应用程序。所以我的 bytearray 应该由 1000 个元素组成,这些元素将像这样打包:integer、float、integer、float... 等等。

所以目前我正在做的是:

bytes = bytearray()
for k in range(0, 500):
   bytes += struct.pack("i", integer_number)
   bytes += struct.pack("f", float_number)

但我认为这需要很多时间,因为每次执行“+=”时,都会创建新数组,将值复制到新字节数组,然后添加新值。我说的对吗?

那么有没有更快的方法来做到这一点?例如,我需要转换为 bytearray 的值存储在列表中,那么我可以更快地从这些值创建 bytearray 吗?

【问题讨论】:

    标签: python arrays python-3.x sockets floating-point


    【解决方案1】:

    您可以使用struct.pack_into 将数据放入预先分配的缓冲区中:

    import struct
    
    number_of_pairs = 500
    ints = range(number_of_pairs)
    floats = map(float, ints)
    
    fmt = '!if'
    
    st = struct.Struct(fmt)
    
    binary = bytearray(number_of_pairs * st.size)
    
    for offset, i, f in zip(range(0, len(binary), st.size), ints, floats):
      st.pack_into(fmt, binary, offset, i, f)
    
    for pair in struct.iter_unpack(fmt, binary):
      print(pair)
    

    这个版本在我的机器上运行速度提高了 1.96 倍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2010-11-13
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多