一、bytearray()用法
bytearray() 方法为python内置函数,其用于返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。其语法如下:
class bytearray([source[, encoding[, errors]]])
- 如果 source 为整数,则返回一个长度为 source 的初始化数组;
- 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
- 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
- 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
- 如果没有输入任何参数,默认就是初始化数组为0个元素。
二、示例
1、source为字符串时
>>> s = 'xyz'
>>> b = bytearray(str(s),'utf8')
>>> print b
xyz
>>> print b[1]
121
>>> print b[0]
120
>>> print b[2]
122
>>> b = bytearray(u'中国','utf8')
>>> print b
中国
>>> len(b)
6
>>> b[0]
228
>>> b[5]
189
>>> b = bytearray('中国','utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
可以看出,我上面用xyz值时,经bytearray函数处理过后,返回的是字符的ASCII码值(标准ASCII码128位,加扩展位为256位,但这里取值和标准ASCII能对上,和扩展位是对应不上的)。可以看出在使用中文时,必须指定为unicode类型,不然会报超出ascii 128位的范围。ASCII码表对应如下(点击图片看大图):
2、source参数为整数时
>>> b = bytearray(5)
>>> print b
>>> print len(b)
5
>>> print b[0]
>>> print b[1]
>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00')
其返回这个整数所指定长度的空字节数组。
3、source参数为object对象时
当source参数为实现了buffer接口的object对象时,那么将使用只读方式将字节读取到字节数组后返回;当source参数是一个可迭代对象,那么这个迭代对象的元素都必须符合0 <= x < 256,以便可以初始化到数组里。如下:
>>> b = bytearray([1,2,3,4,5])
>>> print len(b)
5
>>> print b[1]
2
>>> b = bytearray([1,2,3,4,5,256])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: byte must be in range(0, 256)