繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM