Python3中保持byte array大小不变的字符串扩展正确实现方法
在Python3中实现固定大小byte数组的字符串扩展需求
要搞定这个需求,核心就是找准原byte数组里字符串的结束位置(第一个全零字节的位置),把新字符串追加进去后再补零,保证数组总长度不变就行。毕竟Python里的bytes是不可变类型,没法直接修改原数组,得生成新的bytes对象返回。
完整实现代码
def modify(x, y): # 找到原字符串的结束标记(第一个空字节) null_pos = x.find(b'\x00') if null_pos == -1: # 如果数组里没有空字节,直接返回原数组(可根据实际场景调整逻辑) return x # 将输入的字符串y转为bytes(默认用utf-8编码,有特殊编码需求可修改) y_bytes = y.encode() # 计算剩余可填充的空间大小 available_space = len(x) - null_pos # 截取y中能放进剩余空间的部分,避免超出数组总长度 usable_y = y_bytes[:available_space] # 拼接新的byte数组:原字符串部分 + 可用的y字节 + 补零到原长度 new_x = x[:null_pos] + usable_y + b'\x00' * (len(x) - null_pos - len(usable_y)) return new_x # 测试示例 x = bytes([0x41,0x42,0x43,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]) y = 'EFGH' print(x) x = modify(x,y) print(x)
代码细节说明
- 定位字符串末尾:用
x.find(b'\x00')快速找到第一个全零字节的索引,这就是原字符串的结束位置。 - 兼容超长字符串:如果输入的
y长度超过剩余空间,会自动截取能放下的部分,不会导致数组长度超标。 - 严格保持数组大小:拼接完成后,用
b'\x00'补全剩余空位,确保新数组和原数组的长度完全一致。
运行这段代码后,输出会和你预期的完全一致:
b'ABCD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'ABCDEFGH\x00\x00\x00\x00\x00\x00\x00\x00'
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

