我想了解Python3中的bytes
和bytearray
类。我已经看过它们的文档,但是没有一个全面的描述它们之间的区别以及它们如何与string
对象交互的说明。
我想了解Python3中的bytes
和bytearray
类。我已经看过它们的文档,但是没有一个全面的描述它们之间的区别以及它们如何与string
对象交互的说明。
bytes
和bytearray
是相似的...Python 3的bytes
和bytearray
类都保存了字节的数组,其中每个字节的值可以在0到255之间。主要的区别在于bytes
对象是不可变的,意味着一旦创建,就无法修改其元素。相反,bytearray
对象允许您修改其元素。
bytes
和bytearray
都提供了用于编码和解码字符串的函数。
bytes
和字符串编码可以通过几种不同的方式构建一个bytes对象:
>>> bytes(5)
b'\x00\x00\x00\x00\x00'
>>> bytes([116, 117, 118])
b'tuv'
>>> b'tuv'
b'tuv'
>>> bytes('tuv')
TypeError: string argument without an encoding
>>> bytes('tuv', 'utf-8')
b'tuv'
>>> 'tuv'.encode('utf-8')
b'tuv'
>>> 'tuv'.encode('utf-16')
b'\xff\xfet\x00u\x00v\x00'
>>> 'tuv'.encode('utf-16-le')
b't\x00u\x00v\x00'
[0xff, 0xfe]
。当像后面的例子一样指定了'utf-16-le'的显式顺序时,编码形式会省略字节顺序标记。>>> a = bytes('tuv', 'utf-8')
>>> a
b'tuv'
>>> a[0] = 115
TypeError: 'bytes' object does not support item assignment
bytearray
和编码字符串与bytes
类似,可以通过多种方式构建一个bytearray:
>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00')
>>> bytearray([116, 117, 118])
bytearray(b'tuv')
>>> bytearray('tuv')
TypeError: string argument without an encoding
>>> bytearray('tuv', 'utf-8')
bytearray(b'tuv')
>>> bytearray('tuv', 'utf-16')
bytearray(b'\xff\xfet\x00u\x00v\x00')
>>> bytearray('abc', 'utf-16-le')
bytearray(b't\x00u\x00v\x00')
bytearray
是可变的,所以你可以修改它的元素:>>> a = bytearray('tuv', 'utf-8')
>>> a
bytearray(b'tuv')
>>> a[0]=115
>>> a
bytearray(b'suv')
bytes
和bytearray
bytes
和bytearray
对象可以使用+运算符进行连接:
>>> a = bytes(3)
>>> a
b'\x00\x00\x00'
>>> b = bytearray(4)
>>> b
bytearray(b'\x00\x00\x00\x00')
>>> a+b
b'\x00\x00\x00\x00\x00\x00\x00'
>>> b+a
bytearray(b'\x00\x00\x00\x00\x00\x00\x00')
>>> a = bytes('tuv', 'utf-8')
>>> a
b'tuv'
>>> a.decode('utf-8')
'tuv'
>>> b = bytearray('tuv', 'utf-16-le')
>>> b
bytearray(b't\x00u\x00v\x00')
>>> b.decode('utf-16-le')
'tuv'