常识普及:通常在常用的ASCII、utf-8 和unicode 编码中,像 a 这样一个英文字符,在内存中占一个字节。一个汉字在ASCII和unicode编码里占两个字节,在utf-8 编码中占三个字节。一个字节有八位,也就是八个数字,也叫8个bit 。计算机中的最小储存单位就是bit,bit是二进制的,所以计算机中的数据全都是0和1,没有其他的数字。
-
bytes
-
bytes是字节组成的有序的不可变序列
-
字符串按照不同的字符集编码encode返回直接序列bytes
encode(encoding="utf-8", errors="strict") -> str
-
字节序列bytes按照不同的字符集解码decode返回字符串
bytes.decode(encoding="utf-8", errors="strict") -> str
-
bytes的语法:
class bytes([source[, encoding[, errors]]])
- 若没有输入任何参数,默认就是初始化数组为0个元素:
b = bytes()
# 空bytes - 若source为整数,则返回一个长度为source的初始化数组:
b = bytes(3)
# b’\x00\x00\x00’ 创造三个空字节,每个字节为空 - 若source为字符串,这找找指定的encoding讲字符串转换为字节序列:
b = bytes('hello', encoding="utf-8")
# b’hello’ - 若source为可迭代类型,这元素必须为[0,255]中的整数:
b = bytes([1, 2, 3, 4])
# b’\x01\x02\x03\x04’ - 若source为与buffer接口一致的对象,从一个字节序列或者buffer复制出一个新的不可变的bytes对象:
# 复制bytes对象 b1 = bytes([0x61, 0x62]) b2 = b1 print(b1, b2) print(id(b1), id(b2)) print(b1 is b2) # 结果 ''' b'ab' b'ab' 3162472152320 3162472152320 True '''
- 若没有输入任何参数,默认就是初始化数组为0个元素:
-
空bytes对象创建方式:
- 通过构造函数创建空bytes:
b = bytes()
- 通过空字符串创建空bytes:
b = b''
- 通过构造函数创建空bytes:
-
bytes操作:与字符串操作基本一样(string),都是不可变类型
- 替换:
b'Python'.replace(b'P', b'p')
# 里面的参数也是bytes类型的 - 查找:
b'Python'.find(b'o')
# 返回匹配到字节的索引号,未找到返回-1 - 十六进制数字组成的字符串转换为bytes
# 十六进制数字组成的字符串 s = '49 20 6c 69 6b 65 20 50 79 74 68 6f 6e' # 空格是无效的,要空格需要用ASCII编码 b = bytes.fromhex(s) print(b) # 结果 ''' b'I like Python' ''' # 字符串转化为十六进制表达 hex_str = 'I like Python'.encode().hex() print(hex_str) res = [
- 替换:
-