一、bytearray()用法

bytearray() 方法为python内置函数,其用于返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。其语法如下:

1class bytearray([source[, encoding[, errors]]])
  • 如果 source 为整数,则返回一个长度为 source 的初始化数组;
  • 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
  • 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
  • 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
  • 如果没有输入任何参数,默认就是初始化数组为0个元素。

二、示例

1、source为字符串时

 1>>> s = 'xyz'
 2>>> b = bytearray(str(s),'utf8')
 3>>> print b
 4xyz
 5>>> print b[1]
 6121
 7>>> print b[0]
 8120
 9>>> print b[2]
10122
11>>> b = bytearray(u'中国','utf8')
12>>> print b
13中国
14>>> len(b)
156
16>>> b[0]
17228
18>>> b[5]
19189
20>>> b = bytearray('中国','utf8')
21Traceback (most recent call last):
22  File "<stdin>", line 1, in <module>
23UnicodeDecodeError: '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码表对应如下(点击图片看大图):

ascii128
ascii128

2、source参数为整数时

1>>> b = bytearray(5)
2>>> print b
3>>> print len(b)
45
5>>> print b[0]
6>>> print b[1]
7>>> bytearray(5)
8bytearray(b'\x00\x00\x00\x00\x00')

其返回这个整数所指定长度的空字节数组。

3、source参数为object对象时

当source参数为实现了buffer接口的object对象时,那么将使用只读方式将字节读取到字节数组后返回;当source参数是一个可迭代对象,那么这个迭代对象的元素都必须符合0 <= x < 256,以便可以初始化到数组里。如下:

1>>> b = bytearray([1,2,3,4,5])
2>>> print len(b)
35
4>>> print b[1]
52
6>>> b = bytearray([1,2,3,4,5,256])
7Traceback (most recent call last):
8  File "<stdin>", line 1, in <module>
9ValueError: byte must be in range(0, 256)