Прежде всего проходит целое число (скажем 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
Или пойти на изменяемом bytearray
, если вам нужен изменяемый объект, и вы беспокоитесь только с целыми числами в диапазоне 0-256.
Обратите внимание, что 'bytearray' может хранить только целые числа в диапазоне 0-256. Хотя в этом случае OP касается только того же диапазона. :-) –
'bytearray' имеет метод' .extend' для добавления большего количества байтов одновременно, например 'xs.extend (b '\ x11 \ x22 \ x33')'. – pepr