binascii — Convert between binary and ASCII


Thebinascii module contains a number of methods to convert betweenbinary and various ASCII-encoded binary representations. Normally, you will notuse these functions directly but use wrapper modules likeuu,base64, orbinhex instead. Thebinascii module containslow-level functions written in C for greater speed that are used by thehigher-level modules.

Note

a2b_* functions accept Unicode strings containing only ASCII characters.Other functions only acceptbytes-like objects (such asbytes,bytearray and other objects that support the bufferprotocol).

Changed in version 3.3:ASCII-only unicode strings are now accepted by thea2b_* functions.

Thebinascii module defines the following functions:

binascii.a2b_uu(string)

Convert a single line of uuencoded data back to binary and return the binarydata. Lines normally contain 45 (binary) bytes, except for the last line. Linedata may be followed by whitespace.

binascii.b2a_uu(data,*,backtick=False)

Convert binary data to a line of ASCII characters, the return value is theconverted line, including a newline char. The length ofdata should be at most45. Ifbacktick is true, zeros are represented by'`' instead of spaces.

Changed in version 3.7:Added thebacktick parameter.

binascii.a2b_base64(string)

Convert a block of base64 data back to binary and return the binary data. Morethan one line may be passed at a time.

binascii.b2a_base64(data,*,newline=True)

Convert binary data to a line of ASCII characters in base64 coding. The returnvalue is the converted line, including a newline char ifnewline istrue. The output of this function conforms toRFC 3548.

Changed in version 3.6:Added thenewline parameter.

binascii.a2b_qp(data,header=False)

Convert a block of quoted-printable data back to binary and return the binarydata. More than one line may be passed at a time. If the optional argumentheader is present and true, underscores will be decoded as spaces.

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

Convert binary data to a line(s) of ASCII characters in quoted-printableencoding. The return value is the converted line(s). If the optional argumentquotetabs is present and true, all tabs and spaces will be encoded. If theoptional argumentistext is present and true, newlines are not encoded buttrailing whitespace will be encoded. If the optional argumentheader ispresent and true, spaces will be encoded as underscores perRFC 1522. If theoptional argumentheader is present and false, newline characters will beencoded as well; otherwise linefeed conversion might corrupt the binary datastream.

binascii.a2b_hqx(string)

Convert binhex4 formatted ASCII data to binary, without doing RLE-decompression.The string should contain a complete number of binary bytes, or (in case of thelast portion of the binhex4 data) have the remaining bits zero.

Deprecated since version 3.9.

binascii.rledecode_hqx(data)

Perform RLE-decompression on the data, as per the binhex4 standard. Thealgorithm uses0x90 after a byte as a repeat indicator, followed by a count.A count of0 specifies a byte value of0x90. The routine returns thedecompressed data, unless data input data ends in an orphaned repeat indicator,in which case theIncomplete exception is raised.

Changed in version 3.2:Accept only bytestring or bytearray objects as input.

Deprecated since version 3.9.

binascii.rlecode_hqx(data)

Perform binhex4 style RLE-compression ondata and return the result.

Deprecated since version 3.9.

binascii.b2a_hqx(data)

Perform hexbin4 binary-to-ASCII translation and return the resulting string. Theargument should already be RLE-coded, and have a length divisible by 3 (exceptpossibly the last fragment).

Deprecated since version 3.9.

binascii.crc_hqx(data,value)

Compute a 16-bit CRC value ofdata, starting withvalue as theinitial CRC, and return the result. This uses the CRC-CCITT polynomialx16 +x12 +x5 + 1, often represented as0x1021. This CRC is used in the binhex4 format.

binascii.crc32(data[,value])

Compute CRC-32, the unsigned 32-bit checksum ofdata, starting with aninitial CRC ofvalue. The default initial CRC is zero. The algorithmis consistent with the ZIP file checksum. Since the algorithm is designed foruse as a checksum algorithm, it is not suitable for use as a general hashalgorithm. Use as follows:

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

Changed in version 3.0:The result is always unsigned.To generate the same numeric value when using Python 2 or earlier,usecrc32(data)&0xffffffff.

binascii.b2a_hex(data[,sep[,bytes_per_sep=1]])
binascii.hexlify(data[,sep[,bytes_per_sep=1]])

Return the hexadecimal representation of the binarydata. Every byte ofdata is converted into the corresponding 2-digit hex representation. Thereturned bytes object is therefore twice as long as the length ofdata.

Similar functionality (but returning a text string) is also convenientlyaccessible using thebytes.hex() method.

Ifsep is specified, it must be a single character str or bytes object.It will be inserted in the output after everybytes_per_sep input bytes.Separator placement is counted from the right end of the output by default,if you wish to count from the left, supply a negativebytes_per_sep value.

>>>importbinascii>>>binascii.b2a_hex(b'\xb9\x01\xef')b'b901ef'>>>binascii.hexlify(b'\xb9\x01\xef','-')b'b9-01-ef'>>>binascii.b2a_hex(b'\xb9\x01\xef',b'_',2)b'b9_01ef'>>>binascii.b2a_hex(b'\xb9\x01\xef',b' ',-2)b'b901 ef'

Changed in version 3.8:Thesep andbytes_per_sep parameters were added.

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

Return the binary data represented by the hexadecimal stringhexstr. Thisfunction is the inverse ofb2a_hex().hexstr must contain an even numberof hexadecimal digits (which can be upper or lower case), otherwise anError exception is raised.

Similar functionality (accepting only text string arguments, but moreliberal towards whitespace) is also accessible using thebytes.fromhex() class method.

exceptionbinascii.Error

Exception raised on errors. These are usually programming errors.

exceptionbinascii.Incomplete

Exception raised on incomplete data. These are usually not programming errors,but may be handled by reading a little more data and trying again.

See also

Modulebase64

Support for RFC compliant base64-style encoding in base 16, 32, 64,and 85.

Modulebinhex

Support for the binhex format used on the Macintosh.

Moduleuu

Support for UU encoding used on Unix.

Modulequopri

Support for quoted-printable encoding used in MIME email messages.