我想使用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)
但是我认为这要花很多时间,因为每次执行“ + =”时,都会创建新数组,将值复制到新的字节数组,然后添加新的值。我说的对吗?
那么有没有更快的方法呢?例如,我需要转换为字节数组的值存储在列表中,那么我可以以某种方式从这些值创建字节数组吗?
答案 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倍。