Как добавить к байтам в python 3

у меня есть несколько bytes.

b'x01x02x03'

и int в диапазоне 0..255.

5

теперь я хочу добавить int до bytes такой:

b'x01x02x03x05'

как это сделать? Нет append метод bytes. Я даже не знаю, как сделать целое число одним байтом.

>>> bytes(5)
b'x00x00x00x00x00'

2 ответов


bytes незыблем. Использовать bytearray.

xs = bytearray(b'\x01\x02\x03')
xs.append(5)

прежде всего, передавая целое число (скажем n) к bytes() просто возвращает строку байт n длина с нулевыми байтами. Так, это не то, что вы хотите здесь:

либо вы можете сделать:

>>> bytes([5]) #This will work only for range 0-256.
b'\x05'

или:

>>> bytes(chr(5), 'ascii')
b'\x05'

как @simonzack уже упоминал, что байты неизменяемы, поэтому для обновления (или, лучше сказать, повторного назначения его новой строке) его значение необходимо использовать += оператора.

>>> s = b'\x01\x02\x03'
>>> s += bytes([5])     #or s = s + bytes([5])
>>> s
b'\x01\x02\x03\x05'

>>> s = b'\x01\x02\x03'
>>> s += bytes(chr(5), 'ascii')   ##or s = s + bytes(chr(5), 'ascii')
>>> s
b'\x01\x02\x03\x05'

справка о bytes():

>>> print(bytes.__doc__)
bytes(iterable_of_ints) -> bytes
bytes(string, encoding[, errors]) -> bytes
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
bytes() -> empty bytes object

Construct an immutable array of bytes from:
  - an iterable yielding integers in range(256)
  - a text string encoded using the specified encoding
  - any object implementing the buffer API.
  - an integer

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