[英]Packing integers and floats to bytearray for sending over socket
我想使用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)
但是我认为这会花费很多时间,因为每次执行“ + =”时,都会创建新的数组,将值复制到新的字节数组,然后添加新的值。 我对吗?
那么有没有更快的方法来做到这一点? 例如,我需要转换为字节数组的值存储在列表中,那么我可以以某种方式从这些值创建字节数组吗?
您可以使用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倍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.