如何在bytearray中每3字节后添加空字节?附NumPy高效方案
需求与问题
我需要在bytearray的每3个字节后添加一个空字节。通常我的bytearray以4字节为一组(后续可拆分为多个uint32),但有时会遇到3字节一组的情况,无法直接传入相关函数处理。由于数据量约100万字节,需要高效实现该操作。
当前使用np.frombytes()时遇到的问题:
data #(bytearray, 数据为3字节或4字节一组) if buffer_size == 3: # 已知该条件 pass # 此处需扩展bytearray,添加空字节 new_array = np.frombytes(data, dtype=np.uint32) # 4字节时正常,3字节时失败 val1, val2 = new_array//256, new_array%256
高效解决方案
针对np.frombuffer调整数据类型,实现直接读取并自动重塑,无需手动插入空字节:
val_list = np.frombuffer(data, dtype=(np.uint8, buffer_size)) # 如需将3字节组转换为数值,可执行以下计算 # val_list = val_list[:, 0]*(256*256) + val_list[:, 1]*256 + val_list[:,2]
旧替代方案(速度较慢)
通过将bytearray拆分为字符串规避问题,但运行效率低,不适合大数据量场景:
new_array = np.array(data.hex(" ", buffer_size).upper().split(" ")) new_array = np.vectorize(int)(new_array, 16)
内容的提问来源于stack exchange,提问作者Nitroxy
相关产品推荐
相关产品推荐

