Как добавить к байтам в python 3
у меня есть несколько bytes
.
b'x01x02x03'
и int
в диапазоне 0..255.
5
теперь я хочу добавить int
до bytes
такой:
b'x01x02x03x05'
как это сделать? Нет append
метод bytes
. Я даже не знаю, как сделать целое число одним байтом.
>>> bytes(5)
b'x00x00x00x00x00'
2 ответов
прежде всего, передавая целое число (скажем 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.