如何在python 3中附加到字节

时间:2014-11-18 18:30:02

标签: python python-3.x

我有一些bytes

b'\x01\x02\x03'

int范围为0..255。

5

现在我想将int附加到bytes,就像这样:

b'\x01\x02\x03\x05'

怎么做? append中没有bytes方法。我甚至不知道如何使整数成为单个字节。

>>> bytes(5)
b'\x00\x00\x00\x00\x00'

2 个答案:

答案 0 :(得分:23)

bytes是不可变的。使用bytearray

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

答案 1 :(得分:7)

首先将整数(比如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

如果您需要一个可变对象并且您只关注0-256范围内的整数,那么可以选择mutable bytearray