zoukankan      html  css  js  c++  java
  • python binascii模块详解

    ['Error', 'Incomplete',

    'b2a_hex', 'hexlify' #Hexadecimal representation of binary data. 字符串转16进制
    'a2b_hex', 'unhexlify', #Binary data of hexadecimal representation 16进制转字符串
    'b2a_base64', #Base64-code line of data. base64加密
    'a2b_base64', #Decode a line of base64 data. base64解密
    'crc32', #Compute CRC-32 incrementally

    'a2b_hqx', 'b2a_hqx', 'crc_hqx', 'rlecode_hqx', 'rledecode_hqx'
    'a2b_qp', 'b2a_qp'
    'a2b_uu', 'b2a_uu'
    ]

    s = 'abcde'
    h = B.b2a_hex(s.encode()) #'6162636465'
    h = B.hexlify(s.encode())
    crc = B.crc32(h)

    s = B.a2b_hex(h).decode()
    s = B.unhexlify(h).decode() #'abcde'

    h = B.b2a_base64(s.encode()) #b'YWJjZGU= '
    s = B.a2b_base64(h).decode() #'abcde'


    base64 标准模块。
    binhex 标准模块。
    uu 标准模块。
    quopri 标准模块。

    binascii模块包含很多用来方法来转换二进制和各种ASCII编码的二进制表示法。通常不直接使用这些功能,而是使用封装模块,如uu, base64或binhex。binascii模块包含用C语言编写更快的低级功能,通常为高级模块所使用。

    Uu编码
    uu编码格式现在已经比较少使用,相关函数binascii.a2b_uu(string)和binascii.b2a_uu(data)这里不做介绍。

    Binhex编码
    Binhex用于Macintosh平台。这里暂不做介绍。相关函数有:binascii.rledecode_hqx(data) ,binascii.rlecode_hqx(data),binascii.a2b_hqx(data),binascii.b2a_hqx(data) ,binascii.crc_hqx(data, crc)。


    Base64编码
    binascii.a2b_base64(string):转换的base64数据块为二进制,并返回二进制数据。一次可以传递多行。和base64. b64decode对应。
    binascii.b2a_base64(data):转换二进制数据为一行base64编码的ASCII字符。返回字符串包含换行符。根据base64的标准data的长度最大为57。和base64. b64encode对应。

    QP码
    Quoted-printable,或QP encoding,没有规范的中文译名,可译为“可打印字符引用编码”、“使用可打印字符的编码”。Quoted-printable是使用可打印的ASCII字符 (如字母、数字与"=")表示各种编码格式下的字符,以便能在7-bit数据通路上传输8-bit数据, 或者更一般地说在非8-bit clean媒体上正确处理数据。这被定义为MIME content transfer encoding,用于e-mail。
    QP使用"="开头的转义字符. 一般限制行宽为76,因为有些软件限制了行宽.
    binascii.a2b_qp(string[, header]):转换引述打印数据块为二进制,并返回二进制数据。多行可以在同一时间被传递。如果可选参数头存在和真实,下划线将被解码为空格。
    实际上,QP码是是把’x00’转换成’=00’,也就是替换’x’为’=’。

    >>> s ='x00='
    >>> s = '=x00hello'
    >>> import binascii
    >>> encoded = binascii.b2a_qp(s)
    >>> encoded
    '=3D=00hello'
    >>> decoded = binascii.a2b_qp(encoded)
    >>> print decoded
    =hello
    >>> print repr(decoded)
    '=x00hello'

    CRC校验和
    binascii.crc32(data[, crc]):计算的data 的32位校验和CRC-32时,crc为初始CRC 。crc32与ZIP文件的校验和一致。

    >>> print binascii.crc32("hello world")
    222957957
    >>> crc = binascii.crc32("hello")
    >>> crc = binascii.crc32(" world", crc) & 0xffffffff
    >>> print 'crc32 = 0x%08x' % crc
    crc32 = 0x0d4a1185
    >>> crc
    222957957
    为了保证跨平台,可以在crc结果上& 0xffffffff。原因如下:
    Changed in version 2.6: The return value is in the range [-2**31, 2**31-1] regardless of platform. In the past the value would be signed on some platforms and unsigned on others. Use & 0xffffffff on the value if you want it to match Python 3 behavior.
    Changed in version 3.0: The return value is unsigned and in the range [0, 2**32-1] regardless of platform.

    二进制转换
    binascii.b2a_hex(data)和binascii.hexlify(data):返回二进制数据的十六进制表示。每个字节被转换成相应的2位十六进制表示形式。因此,得到的字符串是是原数据长度的两倍。
    binascii.a2b_hex(hexstr) 和binascii.unhexlify(hexstr):从十六进制字符串hexstr返回二进制数据。是b2a_hex的逆向操作。 hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则报TypeError。
    >>> s = 'hello'
    >>> b = b2a_hex(s)
    >>> print b
    68656c6c6f
    >>> a2b_hex(b)
    'hello'
    >>> b = hexlify(s)
    >>> print b
    68656c6c6f
    >>> unhexlify(b)
    'hello'

  • 相关阅读:
    一步步学习SPD2010--第三章节--处理列表和库
    《python深度学习》笔记---2.4、神经网络的“引擎”:基于梯度的优化
    《python深度学习》笔记---2.1-2.3、神经网络的数学基础
    【tensorflow2.0】模型层layers
    《python深度学*》笔记---1.3、为什么是深度学*,为什么是现在
    XGBoost是什么
    梯度提升决策树 算法过程
    集成方法中的梯度提升回归树(梯度提升机)模型
    《python深度学习》笔记---1.2、深度学习之前:机器学习简史
    《python深度学习》笔记---1.1、人工智能、机器学习与深度学习
  • 原文地址:https://www.cnblogs.com/hushaojun/p/7552138.html
Copyright © 2011-2022 走看看