# 19.8。 `binascii` - 在二进制和ASCII之间转换

`binascii`模块包含许多在二进制和各种ASCII编码二进制表示之间转换的方法。通常，您不会直接使用这些函数，而使用封装过的模块，例如`uu`，`base64`或`binhex`。`binascii`模块包含用C编写的低级函数，用于更高的速度，由更高级别的模块调用。

注意

`a2b_*`函数接受仅包含ASCII字符的Unicode字符串。其他函数只接受bytes-like objects（例如`bytes`，`bytearray`和其他支持缓冲区协议的对象）。

在版本3.3中更改：现在，`a2b_*`函数接受仅ASCII Unicode字符串。

`binascii`模块定义以下函数：

`binascii.``a2b_uu`(string)

  将单行的uuencoded数据转换回二进制并返回二进制数据。行通常包含45（二进制）字节，除了最后一行。行数据后面可以跟空格。

`binascii.``b2a_uu`(data)

  将二进制数据转换为一行ASCII字符，返回值是转换后的行，包括换行符。数据的长度应至多为45。

`binascii.``a2b_base64`(string)

  将一个base64数据块转换回二进制并返回二进制数据。一次可以传递多于一行。

`binascii.``b2a_base64`(data)

  在base64编码中将二进制数据转换为一行ASCII字符。返回值是转换后的行，包括换行符。添加换行符是因为该函数的原始用例是给它一系列57字节的输入行以获得符合MIME-base64标准的输出行。否则输出符合 RFC 3548。

`binascii.``a2b_qp`(data, header=False)

  将一组引用可打印数据转换回二进制并返回二进制数据。一次可以传递多于一行。如果可选参数头存在且为真，则下划线将解释为空格。

`binascii.``b2a_qp`(data, quotetabs=False, istext=True, header=False)

  将二进制数据转换为带引号的可打印编码中的ASCII字符行。返回值是转换后的行。如果可选参数quotetabs存在且为true，则所有制表符和空格都将被编码。如果可选参数istext存在且为真，则不会对换行符进行编码，而会对尾部空格进行编码。如果可选参数头存在且为真，则根据RFC1522，空格将编码为下划线。如果可选参数头存在且为假，则换行符也将被编码；否则换行可能会破坏二进制数据流。

`binascii.``a2b_hqx`(string)

  将binhex4格式的ASCII数据转换为二进制，不进行RLE解压缩。字符串应该包含完整数量的二进制字节，或者（在binhex4数据的最后部分的情况下）具有剩余位零。

`binascii.``rledecode_hqx`(data)

  按照binhex4标准对数据执行RLE解压缩。该算法在一个字节之后使用`0x90`作为重复指示符，后跟计数。计数`0`指定`0x90`的字节值。该例程返回解压缩的数据，除非数据输入数据以孤立的重复指示符结束，在这种情况下，会出现`Incomplete`异常。

  在版本3.2中更改：仅接受bytestring或bytearray对象作为输入。

`binascii.``rlecode_hqx`(data)

  对数据执行binhex4样式RLE压缩并返回结果。

`binascii.``b2a_hqx`(data)

  执行hexbin4二进制到ASCII的转换并返回结果字符串。参数应该已经是RLE编码的，并且具有可被3整除的长度（除了可能的最后一个片段）。

`binascii.``crc_hqx`(data, value)

  计算数据的binhex4 crc值，以值开始作为初始crc，并返回结果。

`binascii.``crc32`(data[, value])

  以值的初始CRC开始，计算数据的32位校验和CRC-32。默认的初始CRC为零。该算法与ZIP文件校验和一致。由于算法被设计为用作校验和算法，所以它不适合用作一般的哈希算法。使用方法如下：

      print(binascii.crc32(b"hello world"))
      # Or, in two pieces:
      crc = binascii.crc32(b"hello")
      crc = binascii.crc32(b" world", crc)
      print('crc32 = {:#010x}'.format(crc))

  在3.0版中更改：结果始终为无符号。要在所有Python版本和平台上生成相同的数值，请使用`crc32（data） ＆amp； 0xffffffff`。

`binascii.``b2a_hex`(data)
`binascii.``hexlify`(data)

  返回二进制数据的十六进制表示。数据的每个字节都转换为相应的2位十六进制表示。因此返回的字节对象的长度是数据的长度的两倍。

`binascii.``a2b_hex`(hexstr)
`binascii.``unhexlify`(hexstr)

  返回由十六进制字符串hexstr表示的二进制数据。此函数是`b2a_hex()`的反向函数。hexstr必须包含偶数个十六进制数字（可以是大写或小写），否则会引发`Error`异常。

exception `binascii.``Error`

  出现错误时抛出异常。这些通常是编程错误。

exception `binascii.``Incomplete`

  对不完整的数据产生异常。这些通常不是编程错误，但可以通过读取更多的数据并再次尝试来处理。

也可以看看

模块`base64`
  支持基于16，32，64和85的符合RFC的base64样式编码。
模块`binhex`
  支持在Macintosh上使用的binhex格式。
模块`uu`
  支持在Unix上使用的UU编码。
模块`quopri`
  支持MIME电子邮件中使用的引用可打印编码。