Python内置数据结构

bytes、bytearray

在python3中引入了两个新的类型分别是bytes和bytearray

bytes

  • 在内存中连续排放的字节序列
  • 不可变字节序列

bytearray

  • 理解为字节中的数组
  • 可变的序列

bytes与字符串

1.字符串是字符组成的有序序列,字符可以使用编码来理解
(编码就是拿几个字节来翻译)
2.bytes是字节组成的有序的不可变序列
3.bytearray是字节组成的有序的可变序列

编码与解码

1.字符串安装不同的字符集编码encode返回字节序列bytes
(从str转换回来只能是bytes不会是bytearray)
2.字节序列按照不同的字符集解码decode返回字符串
(大多数都是str<=>bytes相互转换)
在这里插入图片描述
例如输入‘啊’,就是将‘啊’转换成字节,在内存中的字节
在这里插入图片描述

ASCLL

美国信息交换标准代码
(基于拉丁字母的一套单字节编码系统)!在这里插入图片描述
例如 \r 、\r、\n就是表中的9,13,10!在内存中就是这样的位置,红框中的是0-9,A-Z,a-z,都是最基础的最常用的编码!

  • 上面的是0-127 一共标识了128种状态,而128-255剩下的单字节已经被多方再次定义了!绝大多数都兼容了这个ascll了!
  • 中国编码定义时间比较晚,单字节编满了,所以我们都是使用的双字节编码,但是台湾使用繁体字也是比大陆早,所以大陆最先的编码表示GB2312,后来扩编更正成了现在最常用的GBK!
  • 最后全球的编码更正为一套编码表为Unicode(65536种状态可以描述全球的足够了)
  • Windows基本上不是默认这个Unicode编码表而是GBK编码表,是因为会省下不少字节,节省空间!

bytes定义

定义:

  • bytes()空bytes在这里插入图片描述
  • bytes(int)指定字节的bytes,被0填充
    (一个int,指的是bytes的长度)
  • 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前缀定义:
    1.只允许基本ASCLL使用字符形式b’abc9’
    2.使用16进制表示b"\x41\x61"

bytes的操作

  • 和str类型类似,都是不可变类型,所以方法很多都是一样的,只不过bytes的方法,输入和输出都是bytes
  • 类方法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定义

定义:

  • bytearray()空bytearray
  • bytearray(int)指定字节的bytearray,被0填充
  • bytearray(interble_of_ints)=>bytearray[0,255]的int组成的可迭代对象
  • bytearray(string,encoding[,errors]=>bytearray近似string.encode(),不过返回的是可变对象
  • bytearray(bytes_or_buffer)从一个字节序列或者buffer复杂出一个新的可变的bytearray对象在这里插入图片描述在这里插入图片描述
    能少用就少用,和列表一样,数据的增减会引起很大的内存效果
  • 注意b前缀定义的类型是bytes类型

bytearray操作

  • 和bytes类型的方法相同
  • 类方法
    和列表相似,追加,插入,迭代,移除,清空,翻转都可以操作,原则一样

字节序

  • 大端模式,big-endian;小端模式,little-endian
  • Intel X86 CPU使用小端模式
  • 网络传输更多使用大端模式
  • Windows、Linux使用小端模式
  • Mac OS使用大端模式
  • Java虚拟机是大端模式
    在这里插入图片描述

int和bytes

  • int.from_bytes(bytes,byteorder)
    将一个字节数组表示成整数在这里插入图片描述

  • int.to_bytes(length,byteorder)
    byteorder字节序
    讲一个整数表达成一个指定长度的字节数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值