字节序列
Python3 引入两个新的类型bytes、bytearray。
bytes不可变字节序列;bytearray是可变字节数组。
编码与解码
-
编码:str => bytes,将字符串这个字符序列使用指定字符集encode编码为一个个字节组成的序列 bytes, str是python中使用的是unicode编码
-
解码:bytes或bytearray => str,将一个个字节按照某种指定的字符集解码为一个个字符串组成的 字符串
输入:'啊'.encode() #unicode--> encode --> utf-8输出:b'\xe5\x95\x8a'输入:b'\xe5\x95\x8a'.decode()输出:'啊'输入:'啊'.encode('gbk')输出:b'\xb0\xa1'
ASCII
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁 字母的一套单字节编码系统
熟记:
-
\x00是ASCII表中第一项,C语言中的字符串结束符
-
\t、\x09,表示tab字符
-
\r\n是\x0d\x0a
-
\x30~\x39 字符0~9,\x31是字符1
-
\x41对应十进制65,表示A
-
\x61对应十进制97,表示a
注意:这里的1指定是字符1,不是数字1 UTF-8、GBK都兼容了ASCII
00000000 0 null '\x00'00000000 init 0 str null ascii00001001 '\x09' '\t'00001010 '\x0a' '\n'13 0x0D '\x0d' '\r'65 0x41 '\x41' 'A' #65//16=4 65%16=197 0x61 '\x61' 'a'48 0x30 '\x30' '0' 49 0x31 '0x31' '1'57 0x39 '\x39' '9''a\x09b\x0d\x0ac \x31\x41\x61' # 表示什么? 'a\tb\r\nc 1Aa''A' > 'a' # 谁大? 'a'大
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类型类似,都是不可变类型,操作方法类似。
print(b'abcd'[2]) # 返回int,指定是本字节对应的十进制数x = b'\t\x09'print(x, len(x))y = br'\t\x09'print(y, len(y))输入:'啊'.encode(),b'\xe5\x95\x8a'.decode()输出:(b'\xe5\x95\x8a', '啊')输入:bytes([1,9,10,13,0x41]),bytes(range(0x61,0x64))输出:(b'\x01\t\n\rA',b'abc')输入:bytes(b'abc')输出:b'abc'输入:bytes(5)输出:b'\x00\x00\x00\x00\x00'输入:b1 = bytes(range(0x61,0x64))输出:b1[0] = 97
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类型 由于bytearray类型是可变数组,所以,类似列表。
-
append(int) 尾部追加一个元素
-
insert(index, int) 在指定索引位置插入元素
-
extend(iterable_of_ints) 将一个可迭代的整数集合追加到当前bytearray
-
pop(index=-1) 从指定索引上移除元素,默认从尾部移除
-
remove(value) 找到第一个value移除,找不到抛ValueError异常
-
注意:上述方法若需要使用int类型,值在[0, 255]
-
clear() 清空bytearray
-
reverse() 翻转bytearray,就地修改
b = bytearray()b.append(97)b.append(99)b.insert(1,98)b.extend([65,66,67])b.remove(66)b.pop()b.reverse()print(b) # 输出什么b.clear()