bytes and bytearray
- Python3引入两新类型
1. bytes:不可变的字节序列
2. bytearray:字节组,是可变的 - 字符串与bytes
1. 字符串是字符组成的有序序列,字符可以使用编码来理解
2. bytes是字节组成的有序的不可变的序列
3. bytrarray是字节组成的有序的可变是序列 - 编码与解码
1. 字符串按照不同的字符集编码,encode返回字节序列bytes;
encode(encoding=‘utf-8’,errors=‘strict’) ->bytes
'qwe'.encode() >>>b'qwe'
2. 字节序列按照不同的字符集解码,decode返回字符串
bytes.decode(encoding=“utf-8”,errors=“strict”) ->str
b'qwe'.decode() >>>'qwe'
bytearray.decode(encoding=“utf-8”,errors=“strict”) ->str
bytearray(b'qwe').decode() >>>'qwe'
ASCII码
- ASCII,美国信息交换标准代码,是基于拉丁字母的一套单字节编码系统
bytes定义
- bytes() 空bytes
- bytes(int) 指定字节的bytes,被0填充
bytes(3) >>>b'\x00\x00\x00'
- bytes(iterable_of_ints) -> bytes [0,255]的int组成的可迭代对象
bytes(range(5)) >>>b'\x00\x01\x02\x03\x04'
bytes([1,3,6]) >>>b'\x01\x03\x06'
- bytes(string,encoding[,errors])->bytes等价于string.encode()
- bytes(bytes_or_buffer)->immutable copy of bytes_or_buffer,从一个字节序列或者buffer复制出一个新的不可变的bytes对象
- 使用b前缀定义
只允许基本的ASCII使用的字符b’abc9’
使用十六进制表示b"\x41\x61
bytes 操作
- 和str类型类似,都是不可变类型,所以方法很多都是一样.只不过bytes的方法,输入的是bytes,输出的也是byters
b'abcdef'.replace(b'f',b'k') >>> b'abcdek'
- 类方法 bytes.fromhex(string)
string必须是2个字节的16进制的形式,‘6161 6a 6b’,空格将被忽略
bytes.fromhex('6161 6a 6b') >>>b'aajk'
- 返回16进制的字符串
‘abc’.encode().hex
例如:'abc'.encode().hex() >> '616263'
- 索引
b’abce’[2],返回该字节对应的数,int类型
byterarray
- 定义
bytearray()空bytearray
byteraray(int)指定字节的bytearray,被0填充
bytearray(iterable_of_ints)->bytearray [0,255]的int组成的可迭代对象
bytearray(string,encoding[,error])->bytearray 近视string.encode(),不过返回可变对象
注意b前缀定义的类型是bytes类型
bytearray操作
- 和bytes类型的方法相同
bytearray(b'abcd').replace(b'd',b'k') >>>bytearray(b'abck')
bytearray(b'abc').find(b'b') >>>1
- 类方法bytearray.fromhex(string)
string必须是2个字符的16进制的形式,‘6162 6a 6b’,空格将被忽略
bytearray.fromhex('6162 6a 6b') >>>bytearray(b'abjk')
返回16进制表示的字符串
bytearray('abc'.encode()).hex() >>>'616263'
- 索引
bytearray(b'abcdef')[2] >>99
返回该字节对应的数,int型 - append(int),尾部追加一个元素
b = bytearray(b'qw')
b.append(97)
print(b)
>>>bytearray(b'qwa')
----------------------
b = bytearray(b'qw')
b.append(0x41)
print(b)
>>>bytearray(b'qwA')
- insert(index,int)在指定索引位置插入元素
- extend(iterable_of_ints)将一个可迭代的集合追加到当前的bytearray
- pop(index=-1)从指定位置索引上移除元素默认尾部移除
b = bytearray(b'qwa' )
b.pop(1)
>>>119
- remove(value)找到第一个value移除,找不到抛valueError异常
- 注意:上述方法若需要使用int类型,则值在[0,255]
- clear()清空bytearray
- reverse()翻转bytearray,就地修改
字节序
- 大端模式,big_endian;小端模式,little_endian
- intelX86CPU使用小端模式
- 网络传输更多使用的是大端模式
- windows,Linux使用的的小端模式
- Mac OS使用大端模式
- Java虚拟机是大端模式
int和bytearray (数字与字节数的相互转化)
- int.from_bytes(bytes,byteorder)
将一个字节数组表示成整数 (把字节数用数字,十进制表示) - int.to_bytes(length,byteorder)
byteorder字节序
将一个整数表达成一个指定长度的字节数组 (把数字用字节数表示)