bytes、bytearray
Python3引入两个新类型:
bytes
不可变字节序列
bytearray
字节数组
可变
字符串与bytes
字符串是字符组成的有序序列,字符可以使用编码来理解;
bytes是字节组成的有序的不可变序列;
bytearray是字节组成的有序的可变序列;
编码与解码
字符串按照不同的字符集编码encode返回字节序列bytes
S.encode(encoding='utf-8', errors='strict') -> bytes
字节序列按照不同的字符集解码decode返回字符串
bytes.decode(encoding='utf-8', errors='strict') -> str
bytearray.decode(encoding='utf-8', errors='strict') -> str
bytes定义:
bytes() 空bytes bytes(int) 指定字节的bytes,被0填充 bytes(iterable_of_ints) -> bytes [0,255]的int组成的可迭代对象 bytes(string,encoding[,errors]) -> bytes 等价于string.encode() bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出一个新的不可变的bytes对象 使用b前缀定义 只允许基本ASCII使用字符形式b'abc9' 使用16进制表示b'\x41\x61'
bytes操作:
和str类型类似,都是不可变类型,所以方法很多都一样。只不过bytes方法,输入是bytes,输出是bytes In [1]: b'abcdef'.replace(b'f',b'k') Out[1]: b'abcdek' In [2]: b'abc'.find(b'b') Out[2]: 1 类方法bytes.fromhex(string): string必须是2个字符的16进制的形式,‘6162 6a 6b’,空格将被忽略 In [3]: bytes.fromhex('6162 09 6a 6b00') Out[3]: b'ab\tjk\x00' hex() 返回16进制表示的字符串 In [4]: 'abc'.encode().hex() Out[4]: '616263' 索引 In [6]: b'abcdef'[2] Out[6]: 99 返回该字节对应的数,int类型
bytearray定义
bytearray() 空bytearray bytearray(int) 指定字节的bytearray,被0填充 bytearray(iterable_of_ints) -> bytearray [0,255]的int组成的可迭代对象 bytearray(string,encoding[,errors]) -->bytearray 近似string.encode(),不过返回可变对象 bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象 注意 ,b前缀定义的类型是bytes类型
bytearray操作
和bytes类型的方法相同 In [1]: bytearray(b'abcdef').replace(b'f',b'k') Out[1]: bytearray(b'abcdek') In [2]: bytearray(b'abc').find(b'b') Out[2]: 1 类方法bytearray.fromhex(string) string必须是2个字符的16进制的形式,'6162 6a 6b',空格将被忽略 In [3]: bytearray.fromhex('6162 09 6a 6b00') Out[3]: bytearray(b'ab\tjk\x00') hex() 返回16进制表示的字符串 In [5]: bytearray('abc'.encode()).hex() Out[5]: '616263' 索引 In [6]: bytearray(b'abcdef')[2] Out[6]: 99 返回该字节对应的数,int类型
操作:
append(int)尾部追加一个元素 insert(index,int)在指定索引位置插入元素 extend(iterable_of_ints)将一个可迭代的整数集合追加到当前bytearray pop(index=-1)从指定索引上移除元素,默认从尾部移除 remove(value)找到第一个value移除,找不到抛ValueError异常 注意,上述方法若需要使用int类型,值在[0,255] clear()清空bytearray reverse()翻转bytearray,就地修改
举例:
In [1]: b = bytearray() In [2]: b.append(97) In [3]: b.append(99) In [4]: b Out[4]: bytearray(b'ac') In [5]: b.insert(1,98) In [6]: b Out[6]: bytearray(b'abc') In [7]: b.extend([65,66,67]) In [8]: b Out[8]: bytearray(b'abcABC') In [9]: b.remove(66) In [10]: b Out[10]: bytearray(b'abcAC') In [11]: b.pop() Out[11]: 67 In [12]: b.reverse() In [13]: b Out[13]: bytearray(b'Acba') In [14]: b.clear() In [15]: b Out[15]: bytearray(b'')