Копирование данных в буфер (байтовый массив) - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь скопировать блок данных (несколько байтов) в больший блок в некоторой позиции.Я могу сделать это достаточно легко в C, но сейчас я делаю это в Python, и мне любопытно, как лучше всего это сделать.

То, как я это сделал, было:

struct.pack_into("p", buffer, pos, str(data))

Где данные и буфер имеют тип bytearray.Python не позволил бы мне копировать данные в буфер без преобразования их в строку (см. Преобразование типов выше), поэтому мне было интересно, как правильно вставить один байт-массив в другой?

1 Ответ

0 голосов
/ 06 февраля 2019

bytearray объекты представляют собой изменяемые последовательности , вы можете скопировать содержимое одного в другое в заданной позиции, назначив срезу:

buffer[pos:pos + len(data)] = data

Нет необходимости илииспользуйте для struct.pack_into() здесь.Обратите внимание, что data может быть любым итерируемым целым числом при условии, что они находятся в диапазоне 0-255;это не обязательно должен быть объект bytes или bytearray.

Демонстрация:

>>> buffer = bytearray(10)
>>> data = bytes.fromhex('deadbeef')
>>> pos = 3
>>> buffer[pos:pos + len(data)] = data
>>> buffer
bytearray(b'\x00\x00\x00\xde\xad\xbe\xef\x00\x00\x00')
...