Python struct.pack_into с форматом char 'x' требует больше байтов.
Я пытаюсь узнать о байт-массивах python, чтобы иметь возможность писать собственные заголовки IP, TPC, UDP. Я использую struct в python для упаковки и распаковывания двоичных данных, поэтому указанные типы задают строку формата.struct.pack_into требует большего количества байтов, указанного в формате
ba2 = bytearray(2)
print(ba2, "The size: ", ba2.__len__())
struct.pack_into(">bx", ba2, 1, 1)
print(struct.unpack(">bx", ba2))
Теперь, когда я пытаюсь собрать в буфер длиной 2 с ">bx"
в формате, в соответствии с выше коде, я получаю ошибку:
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, но, возможно, пропустил его).
Edit:
Извините, если я был неясен. но я хочу просто изменить второй байт в массиве байтов. Таким образом, 'x' padd в формате.
И так же глупо, как я был это просто исключить «х» в формате, как thiss:
struct.pack_into(">b", ba2, 1, 1)
и право упаковки будет иметь бен сделал. С этим выходом:
bytearray(b'\x00\x00') The size: 2
A pack with one byte shift: 0001
(0, 1)
Благодарим за ответ. Но я хочу иметь возможность добавлять только байт (00000001) влево от первого байта, не меняя его, таким образом байт pad x. Потому что, если я просто хочу добавить поле в заголовок, мне нужно сделать смещение (в данном случае 1) с самого начала и не заполнить первое пространство чем-то. –