struct.pack_into需要更多字节,然后以格式指定

约翰逊

格式为char'x'的Python struct.pack_into需要更多字节。

我正在尝试学习python字节数组,以便能够编写自己的IP,TPC,UDP标头。我使用python中的struct打包和解压缩二进制数据,因此指定的类型给出了格式字符串。

ba2 = bytearray(2)
print(ba2, "The size: ", ba2.__len__())
struct.pack_into(">bx", ba2, 1, 1)

print(struct.unpack(">bx", ba2))

现在,当我尝试将">bx"as格式的缓冲区打包为长度为2的缓冲区时,根据上面的代码,我得到了错误:

bytearray(b'\x00\x00') The size:  2
Traceback (most recent call last):
  File "D:/User/Documents/Python/Network/Main.py", line 58, in <module>
    bitoperations_bytes_bytearrays_test()
  File "D:/User/Documents/Python/Network/Main.py", line 49, in bitoperations_bytes_bytearrays_test
    struct.pack_into(">bx", ba2, 1, 1)
struct.error: pack_into requires a buffer of at least 2 bytes

但我有2个字节的字节数组。

我究竟做错了什么?

并且如果我错过了它,请参考一些文档(我已经阅读了python doc,但是可能错过了它)。

编辑:

对不起,如果我不清楚。但我只想更改字节数组中的第二个字节。因此,“ x”以格式填充。

和我一样愚蠢,只是像这样的格式排除了“ x”:

struct.pack_into(">b", ba2, 1, 1)

并且正确的包装将被制成。输出如下:

bytearray(b'\x00\x00') The size:  2
A pack with one byte shift:  0001
(0, 1)
约翰逊

和我一样愚蠢,只是像这样的格式排除了“ x”:

struct.pack_into(">b", ba2, 1, 1)

并且正确的包装将被制成。输出如下:

bytearray(b'\x00\x00') The size:  2
A pack with one byte shift:  0001
(0, 1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章