bytes、bytearray
python3中引入的两个新类型
bytes:是字节组成的有序的不可变字节序列
bytearray:是字节组成的有序的可变序列
编码与解码:
1.字符串按照不同的字符集编码encode返回直接序列butes
encode(encoding=‘utf-8’,errors=‘strict’)->butes
2.字节序列按照不同的字符集解码decode返回字符串
bytes.encode(encoding=‘utf-8’,errors=‘strict’)->butes
butearray.encode(encoding=‘utf-8’,errors=‘strict’)->butes
熟记ASCII
\t \r \n
0-9
A-Z
a-z
bytes定义
1.bytes() 空bytes
2.bytes(int)指定字节的bytes,被0填充
3.bytes(iterable_of_ints)->bytes[0,255]的int组成的可迭代对象
4.bytes(string,encoding[,errors])->bytes等价于string.encode()
5.bytes(bytes_or_buffer)->immutable copy of bytes_or_buffer从一个字节序列或者buffer复制处一个不可变的bytes对象
6.使用b前缀定义
只允许基本ASCII使用字符b’abc’
使用16进制表示b"\x41\x61"
bytes操作
1.和syr类型类似,都是不可变类型,所以方法很多都一样。bytes,输入是bytes,输出是bytes
b’abcdef’.replace(b’f’,b’k’)
b’abc’.find(b’b’)
2.类方法bytes.fromhex(string)
string必须是2个字符的16进制的形式,‘6162 41 42’,空格将被忽略
bytes.fromhex(‘6162 09 6a 6b00’)
3.hex():返回16进制表示的字符串
‘abc’.encode().hex()
4.索引:返回int类型
b’abcdef’[2]返回该字节对应的数,int类型
bytearray定义
1.bytearray() 空bytearray
2.bytearray(int)指定字节的bytearray,被0填充
3.bytearray(iterable_of_ints)->bytearray[0,255]的int组成的可迭代对象
4.bytearray(string,encoding[,errors])->bytearray等价于string.encode(),返回可变对象
5.bytearray(bytes_or_buffer)->immutable copy of bytearray_or_buffer从一个字节序列或者buffer复制处一个不可变的bytes对象
6.使用bytearray前缀定义
只允许基本ASCII使用字符b’abc’
使用16进制表示b"\x41\x61"
bytearray操作
1.和bytes类型的方法相同
bytearray’abcdef’.replace(b’f’,b’k’)
bytearray’abc’.find(b’b’)
2.类方法bytearray.fromhex(string)
string必须是2个字符的16进制的形式,‘6162 41 42’,空格将被忽略
bytearray.fromhex(‘6162 09 6a 6b00’)
3.hex():返回16进制表示的字符串
bytearray(‘abc’.encode()).hex()
4.索引:返回int类型 b = bytearray() b.append()
bytearray’abcdef’[2]返回该字节对应的数,int类型
5.append(int)尾部追加一个元素 b.append(65)
6.insert(index,int)在指定索引位置插入元素 b.insert(1,98)
7.extend(iterable_of_ints)将一个可迭代的整数集合追加到当前bytearray b.extend([65,66,67])
8.pop(index=-1)从指定索引上移除元素,默认从尾部移除 b.pop()
9.remove(value)找到第一个value移除,找不到抛异常 b.remove(66)
10.clear()清空bytearray b.reverse()
11.reverse()翻转bytearry,就地修改 b.clear()
上述方法若使用int类型,值在[0,255]
int和bytes
1.int.from_bytes(bytes,byteorder)
将一个字节数组表示成整数
2.int.to_bytes(lenth,byteorder)
byteorder字节序
将一个整数表达成一个指定长度的字节数组
i = int.form_bytes(b’abc’,‘big’)
print(i,hex(i)) #6382179 0x616263
print(i.to_bytes(3,‘big’)) #b’abc’
字节序:
大端模式 big-endian :尾巴放在大地址端,就是大端模式
MSB:Most Significant Bit,最高有效位
小端模式 little-endian : 尾巴放在低地址端,就是小端模式
LSB:Least Significant Bit,最低有效位
Intel X86 CPU使用小端模式
网络传输更多使用大端模式
Windows、Linux使用小端模式
Mac OS、Java虚拟机使用大端模式