51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4651|回复: 1
打印 上一主题 下一主题

[Python语言及其应用] 7.2 二进制数据之字节和字节数组

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2018-1-1 22:56:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
         处理文本数据比较晦涩难懂(新旧格式化、正则表达式等),而处理二进制数据就有趣多了。你需要了解像字节序(endianness,电脑处理器是如何将数据组织存储为字节的)以及整数的符号位(sign bit)之类的概念。你可能需要研究二进制文件格式、网络包等内容,从而对其中的数据进行提取甚至修改。本节将了解到 Python 中有关二进制数据的一些基本操作。  

        Python 3 引入了下面两种使用 8 比特序列存储小整数的方式,每 8 比特可以存储从 0~255的值:
    • 字节是不可变的,像字节数据组成的元组;
    • 字节数组是可变的,像字节数据组成的列表。  
        我们的示例从创建列表 blist 开始。接着需使用这个列表创建一个 bytes 类型的变量 the_bytes 以及一个 bytearray 类型的变量 the_byte_array:
    1. blist = [1, 2, 3, 254,255]
    2. the_bytes=bytes(blist)
    3. the_byte_array = bytearray(blist)
    4. print(the_bytes)
    5. print(the_byte_array)
    复制代码
    输出:
    1. b'\x01\x02\x03\xfe\xff'
    2. bytearray(b'\x01\x02\x03\xfe\xff')
    复制代码
    下面两行代码都会创建一个包含 256 个元素的结果,包含 0~255 的所有值:
    >>> the_bytes = bytes(range(0, 256))
    >>> the_byte_array = bytearray(range(0, 256))  
         打印 bytes 或 bytearray 数据时, Python 会以 \xxx 的形式表示不可打印的字符, 以 ASCII字符的形式表示可打印的字符(以及一些转义字符,例如 \n 而不是 \x0a)。下面是 the_bytes 的打印结果(手动设置为一行显示 16 个字节):  
         
         看起来可能有些困惑,毕竟上面输出的数据是字节(小整数)而不是字符。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

     成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    沙发
     楼主| 发表于 2018-1-1 23:05:05 | 只看该作者
    bytes 类型值的表示形式比较特殊:以 b 开头,接着是一个单引号,后面跟着由十六进制数(例如 \x02)或 ASCII 码组成的序列,最后以配对的单引号结束。 Python 会将这些十六进制数或者 ASCII 码转换为整数,如果该字节的值为有效 ASCII 编码则会显示 ASCII 字符。
    >>> b'\x61'
    b'a'
    >>> b'\x01abc\xff'
    b'\x01abc\xff'
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 12:45 , Processed in 0.101519 second(s), 32 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表