如何用Python struct模块交错合并两个等长无符号短整型bytearray?
交错合并存储16位无符号整数的bytearray数组
方法一:使用struct模块(符合你的思路)
先将两个bytearray解包为16位无符号整数列表,交错合并后再打包回bytearray:
import struct # 假设bytearray1、bytearray2为已有的等长字节数组,存储小端序16位无符号整数 element_count = len(bytearray1) // 2 # 每个16位值占2字节,计算元素总数 fmt = f'<{element_count}H' # <表示小端序,H对应无符号短整数(16位) # 解包字节数组为整数列表 u_values = struct.unpack(fmt, bytearray1) v_values = struct.unpack(fmt, bytearray2) # 交错合并整数列表 combined_values = [val for pair in zip(u_values, v_values) for val in pair] # 打包回目标bytearray bytearray3 = struct.pack(f'<{len(combined_values)}H', *combined_values)
如果原数组是大端序存储,只需把格式字符串中的<换成>即可。
方法二:直接操作字节块(更高效)
因为每个16位值固定占2字节,可直接按2字节为单位交错拼接,跳过解包/打包步骤:
bytearray3 = bytearray() # 按2字节步长遍历原数组 for i in range(0, len(bytearray1), 2): # 依次添加bytearray1的当前2字节、bytearray2的对应2字节 bytearray3.extend(bytearray1[i:i+2]) bytearray3.extend(bytearray2[i:i+2])
两种方法对比
struct方法逻辑清晰,适合需要先对16位整数做运算再合并的场景;- 直接字节操作避免了类型转换开销,合并纯字节数据时效率更高。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

