考虑以下代码:
some_bytes = bytes(8)
more_bytes = struct.pack(">I", 2)
如何将更多字节插入偏移量为零的some_bytes?我有一些字节是八个空字节,还有一些字节是0x00000002。我想得到这样的结果:0000000 200000000。我不想将更多的字节添加到some_bytes,而是将这些字节插入some_byte的特定偏移中,因为some_byte斯只是用于对齐的空字节。
我在评论中提出问题的原因是所需的行为不清楚:
-
插入意味着将插入内容之后的现有内容向右移动(这会引发关于大小等的问题(
-
替换(期望的(简单地是";重写";原始的一部分
您可以使用[Python.Docs]:struct.pack_into(format,buffer,offset,v1,v2,…(:
>>> import struct >>> >>> >>> b = struct.pack(">Q", 0x1234567890ABCDEF) >>> b b'x124Vxx90xabxcdxef' >>> >>> >>> def replace_bytes(buf, ofs, fmt, *args): ... ba = bytearray(buf) ... struct.pack_into(fmt, ba, ofs, *args) ... return bytes(ba) ... >>> >>> replace_bytes(b, 0, ">I", 2) b'x00x00x00x02x90xabxcdxef' >>> >>> replace_bytes(b, 1, ">IH", 2, 1) b'x12x00x00x00x02x00x01xef'