Python内置数据结构之Bytes、Byetearray

Bytes、Bytearray

Python3引入两个新类型:

  1. Bytes
       不可变字节序列
  2. Bytearray
       字节数组
       可变

字符串与bytes:

  • 字符串是字符组成的有序序列,字符可以使用编码来理解
  • bytes是字节组成的有序的不可变序列
  • bytearray是字节组成的有序的可变序列
  • 编码与解码(*******字符串跟编码有关,字节与编码无关)
  • 字符串按照不同的字符集编码encode返回字节序列bytes
encode(encoding=‘utf-8’,errors=‘strict’)->bytes

    字节序列按照不同的字符集解码decode返回字符串

bytes.decode(encoding=“utf-8”,errors=“strict”)->str

    bytearray.decode(encoding=“utf-8”,errors=“strict”)->str

例:
	print('中'.encode())
	b'\xe4\xb8\xad'
	b'\xe4\xb8\xad'.decode()
	'中'

ASCII

    ASCII(American Standard Code for Information,美国信息交换标准代码)是基于阿拉丁字母的一套单字节码系统
Python3.0以后采用Unicode里面的utf-8,utf是便于网络传输的编码。
Unicode用一个字节来表示ASCII,Unicode是固定的两个字节,所以会浪费字节=流量=钱。就算在中文环境运行也有大量的英文再跑,所以为了节约,采用unicode传输编码也就是utf,utf-8属于这种编码中的一种。也是现在再用的python3.0的uft-8编码。

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"
    (b"\x41\x61".decode(),‘Aa’)

操作
    和str类型类似,都是不可变类型,所以方法很多都一样。只不过bytes的方法,输入是bytes,输出是bytes
    b’abcdef’.replace(b’f’,b’k’)
    b’abc’.find(b’b’)
类方法bytes.fromhex(string)
    string必须是2个字符的16进制的形式,‘6162 6a 6b’,空格将被忽略
    bytes.fromhex(‘6162 09 6a 6b00’)
hex()
    返回16进制表示的字符串
    ‘abc’.encode().hex()
索引
    b’abcdef’[2]返回该字节对应的数,int类型

bytearray操作:

和bytes类型的方法相同
    bytearray(b’abcdef’).replace(b’f’,b’k’)
    bytearray(b’abc’).find(b’b’)

类方法bytearray.fromhex(string)
    string必须是2个字符的16进制的形式,‘6162 6a 6b’,空格将被忽略
    bytearray.fromhex(‘6162 09 6a 6b00’)

hex():
    返回16进制表示的字符串
    bytearray(‘abc’.necode()).hex()

索引:
    bytearray(b’abcdef’)[2]返回该字节对应的数,int类型
字节序列用编码可以转换成字符序列,***ASCII和utf-8,utf-8在单字节完全覆盖ASCII。
    x=bytearray(b’abcdef’)
    x[2]=97
    print(x)
    bytearray(b’abadef’)

  • append(int)尾部追加一个元素 b=bytearray()
  • insert(index,int)在指定索引位置插入元素 b.append(97)
  • extend(iterable_of_ints)将一个可迭代的整数集合追加到 b.append(99),当前bytearray b.insert(1,98)
  • pop(index=-1)从指定索引上移除元素,默认从尾部移除 b.extend([65,66,67])
  • remove(value)找到第一个value移除 b.remove(66),找不到抛ValueError异常 b.pop()
  • 注意:上述方法若需要使用int类型,值在[0,255]
  • clear()清空bytearray b.clear()
  • reverse()翻转bytearray,就地修改 b.reverse()

字节序:

    网络传输更多使用大端模式

回车\r   13
换行\n   10
tab  \t     9
utf-8便于网络传输
utf-8  中文转成编码  往往都是三个字节
GBK  描述汉字两个字节,英文一个字节

ASCII:

16进制 10进制 解释
31 49 从数字1开始
41 65 从大写字母A开始
61 97 从小写字母a开始

猜你喜欢

转载自blog.csdn.net/qq_35976427/article/details/88953109