打包整数并浮点到bytearray以便通过套接字发送

时间:2018-10-10 09:15:11

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

我想使用Socket从python向我的C应用程序传输字节数组。所以我的字节数组应该由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)

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

那么有没有更快的方法呢?例如,我需要转换为字节数组的值存储在列表中,那么我可以以某种方式从这些值创建字节数组吗?

1 个答案:

答案 0 :(得分:0)

您可以使用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}}

此版本在我的计算机上运行速度快1.96倍。