You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:54:10