python中的字符处理,bytes,bytearray
程序员文章站
2022-03-16 08:53:43
...
博客格式:
代码
返回值
(一)bytes,bytearray
字符串与bytes
- 字符串是字符组成的有序序列,字符可以使用编码来理解
- bytes是字节组成的有序的不可变的序列
- bytearray是字节组成的有序的可变序列
编码与解码
- 字符串按照不同的字符集编码encode返回字节序列bytes
encode(encoding=‘utf-8’,errors=‘strict’) ->byes - 字节序列按照不同的字符集解码decode返回字符串
bytes.decode(encoding=‘utf-8’,errors=‘strict’) ->str
bytearry.decode(encoding=‘utf-8’,errors=‘strict’) ->str
ASCII(American Standard Code for Infromation Interchange)
美国信息交换标准代码)是基于拉丁字母的一套单字节编码系统
1310 \r\n
41 A
61 a
48 0
(二)bytes定义
- bytes() 空bytes
bytes()
b’’
- bytes(int) 指定字节的butes,被0填充
bytes(12)
b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’
- bytes(iterable_of_ints)->bytes[0,255]的int组成的可迭代对象
bytes(range(5))
b’\x00\x01\x02\x03\x04’
- bytes(string,encoding[,errors])->bytes等价于string.encode
bytes('abc','utf8')
b’abc’
- bytes(bytes_or_buffer)->immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出一个新的不可变的bytes对象
bytes(b'abc')
b’abc’
- 使用b前缀定义
- 只允许进本ASCII使用字符形式b’abc9’
使用16进制表示b"\x41\x61"
- 只允许进本ASCII使用字符形式b’abc9’
(三)bytes操作
- 和str类型类似,都是不可变类型,所以很多方法都一样。只不过bytes的方法,输入的是bytes,输出的是bytes
b'abcdef'.replace(b'f',b'k')
b’abcdek’
b'abc'.find(b'b')
1
- 类方法 bytes.fromhex(string)
- bytes.fromhex(string)
bytes.fromhex('6162 09 6a 6b00')
b’ab\tjk\x00’
- hex()
- 返回16进制表示的字符串
‘abc'.encode().hex()
‘616263’
- 索引
b’abcdef’[2]返回该字节对应的数,int类型
(四)bytearray定义
- bytearray()空bytearray
bytearray(b’’)
- bytearray(int)指定字节的bytearray,被0填充
bytearray(12)
bytearray(b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’)
- bytearray(itearble_of_ints)->bytearray[0,255]的int组成的可迭代对象
bytearray(range(5))
bytearray(b’\x00\x01\x02\x03\x04’)
- bytearray(string,encoding[,errors])->bytearray 近似string.encode(,不过返回可变对象)
bytearray('6162 09 6a 6b00','utf-8')
bytearray(b’6162 09 6a 6b00’)
- bytearray(bytes_or_buffer)从一个字节序列或者buffer复制出一个可变的新的bytearray对象
bytearray(b'abc')
bytearray(b’abc’)
- 注意,b前缀定义的类型是bytes类型
(五)bytearray操作
- 和bytes类型的方法相同
bytearray(b'abcdef').replace(b'f',b'k')
bytearray(b’abcdek’)
bytearray(b'abc').find(b'b')
1
- 类方法 bytearray.fromhex(string)
- string必须是两个的16进制的形式,’6162 6a 6b’,空格将被忽略
bytearray.fromhex('6162 096a 6b00')
bytearray(b’ab\tjk\x00’)
- hex()
- 返回16进制表示的字符串
bytearray('abc'.encode()).hex()
‘616263’
- 索引
bytearray(b’abcdef’)[2]返回该索引对应的数,int类型
bytearray(b'abcdef')[2]
99
(五)int和bytes
- int.from_bytes(bytes,byteorder)
- 将一个字节数组表示成整数
int.from_bytes(b'abc','big')
6382179
- int.to_bytes(length,byteorder)
- byteorder字节序
- 将一个整数表达成一个指定长度的字节数组
i = int.from_bytes(b’abc’,‘big’)
print(i,hex(i)) #6382179 0x616263
print(i.tobytes(3,‘big’)) #‘abc’
i = 'abc'
i = i.encode()
i = int.from_bytes(b'\x61\x62\x63','big')
i.to_bytes(3,'big').decode()
int.from_bytes('abc'.encode(),'big')
6382179
abc得到bytes得到整形从to bytes得到bytes然后encode还原回去
小练习
字符串—>int—>十六进制—>bytes—>十六进制—>bytearray—>字符串
a = 'hello word' #赋值a
a = a.encode() #编码
a = int.from_bytes(a,'big') #将bytes转换为int
a = a.to_bytes(10,'big') #将int转换为bytes
a = a.hex() #bytes转换为16进制字符串
a = bytes.fromhex(a) #16进制转换为bytes
a = a.hex() #bytes转换为16进制
a = bytes.fromhex(a) #16进制转换为bytes
a = bytearray(a) #bytes转换为byteaaray
a = a.decode('utf8') #将bytearray解码
上一篇: const
下一篇: c++const关键字小节