1、bytes、bytearray

  ---Python3 引入的!

  bytes:不可变字节序列,bytearray:字节属组,可变

  都是连续的空间。

2、字符串与bytes

  字符串是字符组成的有序的序列,字符可以使用编码来理解

  bytes 是戒子组成的有序的不可变序列

  bytearray 是戒子组成的有序的可变序列

3、编码、解码

  字符串按照不同的字符集编码encode返回字节序列bytes

    encode(encoding = ‘utf-8', errors = 'strict') ---> bytes    

1 1 In [139]: 'abd'.encode() # 默认是utf-8
2 2 Out[139]: b'abd' # 应该是数字,但是为了让人看,所以显示成这样,所以前面有一个b

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

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

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

1 In [140]: print(b'abd')
2 b'abd'
3
4 In [141]: _.decode() # _ 表示上次的结果
5 Out[141]: 'abd'

    ASCII:American Standard Code for Information

3、bytes定义:

  定义:

    bytes()空bytes

    bytes(int)指定字节的bytes,被0 填充(0是ASCII 0)

In [142]: bytes(5)
Out[142]: b'\x00\x00\x00\x00\x00'

    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"  字符串就用 \x41   数字 0x61

 1 In [158]: a = bytes(7) # 定义一个字节长度,用ASCII的十六进制的0填充
 2
 3 In [160]: a
 4 Out[160]: b'\x00\x00\x00\x00\x00\x00\x00'
 5
 6 ------------------------------------------------------------------------------
 7
 8 In [161]: c = bytes(range(10)) # 创建一个字节类型,从0-9
 9
10 In [162]: c
11 Out[162]: b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t'# python为了让人看懂,所以显示如上所示,如:x09 对ASCII中的 \t, 而其他的对应的字符无法表示,所以以源字节码显示。
12
13 ------------------------------------------------------------------------------
14
15 In [163]: d = bytes('efg',encoding='utf-8') #这样用很少,一般都是string.encoding()---默认是utf-8编码
16
17 In [164]: d
18 Out[164]: b'efg'
19
20 In [165]: e = bytes(d) 相当于copy了一份
21
22 In [166]: e
23 Out[166]: b'efg'

bytes定义

  

  bytes操作:

    和 str 类型类似,都是不可变,所以方法很多都一样,只不过bytes方法,输入是bytes,输出是bytes

      b'abcdef'.replace(b'f', b'k')

      b'abc'.find(b'b')  

    类方法 bytes,formhex(string)

      string 必须是2个字符的16进制的形式,'1662 6a 6b' ,空格将被忽略!

1 In [172]: bytes.fromhex('616263 09 6a 6b00')
2 Out[172]: b'abc\tjk\x00' # 忽略空格,00没法显示,所以用\x00表示

      索引:b'abcde'[2] 返回该字节对应的数,int类型

1 In [173]: b'abcde'[2]
2 Out[173]: 99
3
4 In [174]: 'abc'.encode()
5 Out[174]: b'abc'
6
7 In [175]: 'abc'.encode()[1]
8 Out[175]: 98

4、bytearray定义

  定义:

    bytearray() 空bytearray

    bytearray(int) 指定字节的bytearray ,被0 填充

    bytearray(iterable_of_ints) --> bytearray [0,255] de int 组成的可迭代对象

    bytearray(string, encoding[, errors]) ---> bytearray 近似string.encode(),(但是这个是返回的字节类型),返回可变对象

    bytearray( bytes_or_buffer) 从一个字节序列或buffer复制出一个新的可变的bytearray对象

    注: b前缀定义的类型是bytes类型

  操作:

    和bytes类型的方法相同:

      bytearray(b'abcd').replace(b'f',b'k')

      bytearrya(b'abc').find(b'b')

    类方法bytearray.fromhex(string)

      sting 必须是2个字符的16进制的形式,'6162 6a6vb' ,空格将被忽略!     

In [176]: bytearray.fromhex('6261 6a')
Out[176]: bytearray(b'baj')

    hex():返回16进制表示的字符串   

1 In [177]: bytearray('abc'.encode()).hex()
2 Out[177]: '616263'

    索引:bytearray(b'abcdeff')[2] 返回该字节对应的数,int类型

    其他操作:

 1 In [205]: a
 2 Out[205]: bytearray(b'asdfa')
 3
 4 In [206]: a.append(0x61)
 5
 6 In [207]: a.append(91)
 7
 8 In [208]: a
 9 Out[208]: bytearray(b'asdfaa[')
10
11 In [209]: a.insert(0,91)
12
13 In [210]: a
14 Out[210]: bytearray(b'[asdfaa[')
15
16 In [211]: a.extend(range(2))
17
18 In [212]: a
19 Out[212]: bytearray(b'[asdfaa[\x00\x01')
20
21 In [213]: a.pop()
22 Out[213]: 1
23
24 In [214]: a
25 Out[214]: bytearray(b'[asdfaa[\x00')
26
27 In [217]: a.remove(97)
28
29 In [218]: a
30 Out[218]: bytearray(b'[sdfaa[\x00')
31
32 In [220]: a.reverse()
33
34 In [221]: a
35 Out[221]: bytearray(b'\x00[aafds[')
36
37 In [222]: a.clear
38 Out[222]: <function bytearray.clear()>
39
40 In [223]: a.clear()
41
42 In [224]: a
43 Out[224]: bytearray(b'')

test

      注:上述方法使用int,且在【0-255】 之间

5、int 和 bytes

  int,from_bytes( bytes,byteordes)

      将一个字节数组表示成整数

  int.to_bytes(length, byteorder)

      byteorder 字节序

      将一个整数表示成一个指定长度的字节数组

  str-----> bytes ---> int:   

 1 In [227]: i = int.from_bytes(b'abc','big')
 2
 3 In [228]: i
 4 Out[228]: 6382179
 5
 6 In [229]: hex(i)
 7 Out[229]: '0x616263'
 8
 9
10 In [231]: i.to_bytes(3,'big') # 数字只能大于等于长度,否则报错
11 Out[231]: b'abc'
12
13 In [232]: i.to_bytes(5,'big') # 大于就补0
14 Out[232]: b'\x00\x00abc'

    大端模式,小端模式:

      mac:大端模式

      network:大端模式

      Windows:小端模式

      字节序:b'\x61\x62'  61应该放在高地址,还是低地址,如果低字节放在高地址,就是大端模式,即 big

转载于:https://www.cnblogs.com/JerryZao/p/9459844.html

Python数据结构之字节,字节数组相关推荐

  1. Python数据结构之树形结构——数组存储

    Python数据结构之树形结构--数组存储 树:一种非线性结构,主要使用链表来存储,也可以使用数组存储. 本代码使用两种数组 元素数组:0,6,3,5,4,7,8,9,2 由于 0 索引不存储元素,所 ...

  2. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题

    Python进阶篇-struct字节对齐问题 Python进阶篇-struct字节对齐问题 Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题.下边所 ...

  3. python求数组最大值_Python算法与数据结构--求所有子数组的和的最大值

    Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. ...

  4. python长整型字节数_Python将整数转换为16字节字节

    已解决 密码学Python Python将整数转换为16字节字节10 我正在尝试在我的代码中使用AES-CTR-128. 我使用Python 2.7并利用cryptography模块进行加密. 我需要 ...

  5. 软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法

    目录 软件的基本是要处理好"算法"及其基础(一): 流->计算机字->字符(包括某个数字.字母.符号和某个汉字等)->字符串->字节动态数组->字节- ...

  6. 【Python】浅谈 字节码 + 虚拟机 (Python 解释器)

    目录 一.绪论 二.说明 2.1 字节码编译 2.2 Python 虚拟机 (PVM) 2.3 性能意义 ☆ 2.4 开发意义 三.小结 一.绪论 Python 通常被描述为一种 解释型语言,在这类语 ...

  7. python 树状数组_【算法日积月累】19-高级数据结构:树状数组

    树状数组能解决的问题 树状数组,也称作"二叉索引树"(Binary Indexed Tree)或 Fenwick 树. 它可以高效地实现如下两个操作: 1.数组前缀和的查询: 2. ...

  8. linux c 字节对齐申请内存与字节对齐数组声明

    查找当前系统cache line大小:cat /sys/devices/system/cpu/cpu1/cache/index0/coherency_line_size 函数:void * memal ...

  9. Python数据结构——array

    array 数组 array是什么 一般来说,array基本是所有程序语言都有的一种基础线性结构,元素以特定的顺序存储在一段连续的内存中. 在Python中其实也有array这种数据结构,和其他语言的 ...

  10. python数据结构是建好的吗_Python数据结构创建的具体应用方案详细描述

    本文主要介绍的是Python数据结构的相关代码与Python数据结构在实际应用的相关操作方案,以下是文章的具体内容的介绍,如果你对Python数据结构的相关内容感兴趣的话,你可以浏览一下的文章对其进行 ...

最新文章

  1. 束文圣和黄立南Nature综述极端环境中的微生物多样性
  2. 剪切粘贴时总是上次的内容_macOS系统上面如何实现Windows上的“剪切”功能
  3. 如何在一分钟内搞定面试官?
  4. Amazon Redshift数据库
  5. MySQL Mac安装教程
  6. SpringBoot + Shiro 缓存记住密码
  7. 【AI视野·今日NLP 自然语言处理论文速览 第二十二期】Mon, 27 Sep 2021
  8. CVPR 2021 3D视觉相关最新进展分享
  9. Angular NgModule 作用域相关问题
  10. 深度学习 --- 随机神经网络详解(玻尔兹曼机学习算法、运行算法)
  11. 常用的python模块及安装方法
  12. JavaWeb POI 将数据从数据库导出到Excel表 实例(亲测有效!)
  13. 电子科技大学研究生图论课程
  14. [C语言] 0.5倍速讲解世纪大战 有趣的C语言玩法
  15. vs2010学习版loadimage();函数载入图片无法加载的问题
  16. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
  17. Excel学习日记:L27-数据重复怎么办
  18. categories与set_categories
  19. 23.网络文件共享服务
  20. 【第三趴】uni-app页面搭建与路由配置(了解工程目录结构、学会搭建页面、配置路由并成功运行)

热门文章

  1. 交换排序 java_Java交换排序:冒泡排序和快速排序
  2. android编写蓝牙工具类,【Android BLE】蓝牙开发「防丢器」的相关知识点(三):手机与设备之间指令传输...
  3. ZMQ中线程之间发送命令
  4. MySQL incompatible with sql_mode=only_full_group_by 问题解决
  5. 京东面试题(Redis):为啥RedisCluster设计成16384个槽
  6. 重要提醒,单片机发展史,它到底是一个什么东西
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试互联网营销概论10092k2
  8. 【渝粤教育】电大中专测量学 (4)作业 题库
  9. [渝粤教育] 西南科技大学 单片机原理与应用 在线考试复习资料(1)
  10. 【渝粤教育】电大中专幼儿园课程论作业 题库