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操作:

    和 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'')

      注:上述方法使用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

bytes,bytearray的更多相关文章

  1. Python字节数组【bytes/bytearray】

    bytes >>> type(b'xxxxx') <class 'bytes'> >>> type('xxxxx') <class 'str'&g ...

  2. 【Python】【内置函数】【bytes&bytearray&str&array】

    [bytes] 英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an i ...

  3. 译文:二进制序列类型 --- bytes, bytearray

    在进行一些内置函数调用时,会发现bytes类型的参数或返回值,这个类型老猿前面没有介绍过,在此就不单独介绍了,直接从Python官网的内容用翻译软件翻译过来稍微修改. 操作二进制数据的核心内置类型是 ...

  4. 关于bytes和bytearray

    背景 平时工作因为有批量线上数据进行更新,通过Python程序连接数据库,利用连接池和gevent的并发性能,处理大量数据. 因为数据方提供的数据表结构中带有varbinary类型字段,并非全部,所以 ...

  5. 使用AS3输出ByteArray为16进制

    package { import flash.utils.ByteArray; /** * 输出ByteArray为16进制 * @author Rise */ public class Byte2H ...

  6. python 内置函数bytearray

    1.参考文档 class bytearray([source[, encoding[, errors]]]) Return a new array of bytes. The bytearray cl ...

  7. python2 与python3中最大的区别(编码问题bytes&str

    1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持 python2 中 >>> s = ...

  8. Python学习笔记015——序列(字节数组 bytearray)

    1 序列 常见的序列有:list   tuple  str  bytes(字节串)  bytearray 2 字节数组bytearray 可变的字节序列,相当于bytes的可变版本. 3 创建函数by ...

  9. [ActionScript 3.0] 记录几个ByteArray 十六进制 String等相互转换的方法

    /** * 通过hax数据返回ByteArray * @param hax 格式 "AA5A000100FF" */ private function getHax(hax:Str ...

随机推荐

  1. pyhon 模块 IP/端口 扫描

    用到了python-nmap模块(注意是 python-nmap模块 不是nmap模块 且不要安装nmap模块!!!!) windows 中还需要下载一个 nmap 软件: 下载地址: https:/ ...

  2. docker容器与宿主主机之间拷贝文件

    文章链接:https://blog.csdn.net/libertine1993/article/details/80651552 https://blog.csdn.net/u011596455/a ...

  3. 从GitHub下载demo时遇到的依赖问题

    从GitHub上使用download zip下载时,经常遇到一些依赖工程没有一起下载,如果额外手动下载,配置起来也相当费事,其实,标准的方法是使用以下命令下载这样的demo. git clone -- ...

  4. 两个c语言结构体复制的问题

    以前一直以为结构体要通过memcpy来复制,现在才明白可直接用“=”复制 C语言中,结构体是一篇连续的内存空间,使用=赋值操作,底层用到的就是memcpy:如果结构体中有指针变量:操作后.两个指针指向 ...

  5. html基础技巧:点击、placeholder、文本、字体、清楚浮动

    点击处理: 消除a标签点击后的边框,颜色(background:#fff) 1:a:focus{outline:none;} button去除边框 1:border:none 2:border:0px ...

  6. C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总

    在List<T>中删除主要有Remove().RemoveAt().RemoveRange().RemoveAll()这几个方法.下面一一介绍使用方法和注意点. 我们以List<st ...

  7. NOIP2018普及初赛解析

    2018年第二十四届全国青少年信息学奥林匹克联赛初赛普及组真题解析 一.单项选择题 1. 以下哪一种设备属于输出设备:(D) A.扫描仪 _B.键盘C. 鼠标 _D. 打印机 解析:送分题,前三个都是 ...

  8. ubuntu linux adb devices no permissions解决办法

    最近在调试安卓手机时老是失败,问题如下所示 han@ubuntu:~/project/zero_app$ adb devices List of devices attached 664768297c ...

  9. pandas导入导出数据-【老鱼学pandas】

    pandas可以读写如下格式的数据类型: 具体详见:http://pandas.pydata.org/pandas-docs/version/0.20/io.html 读取csv文件 我们准备了一个c ...

  10. 【转】傅盛:一家公司最大瓶颈就是CEO

    创业之路,一经踏上,即永无止境.当然,对于初创期的CEO而言,还是有一些方法论可循. 来源 | 盛盛GO(ID:fstalk) 文  | 傅盛 经常有创业者问我,如何当好创业公司CEO,或如何创业,我 ...