\section{\module{binascii} ---
         Convert between binary and \ASCII}

\declaremodule{builtin}{binascii}
\modulesynopsis{Tools for converting between binary and various
                \ASCII-encoded binary representations.}


The \module{binascii} module contains a number of methods to convert
between binary and various \ASCII-encoded binary
representations. Normally, you will not use these functions directly
but use wrapper modules like \refmodule{uu}\refstmodindex{uu} or
\refmodule{binhex}\refstmodindex{binhex} instead, this module solely
exists because bit-manipulation of large amounts of data is slow in
Python.

The \module{binascii} module defines the following functions:

\begin{funcdesc}{a2b_uu}{string}
Convert a single line of uuencoded data back to binary and return the
binary data. Lines normally contain 45 (binary) bytes, except for the
last line. Line data may be followed by whitespace.
\end{funcdesc}

\begin{funcdesc}{b2a_uu}{data}
Convert binary data to a line of \ASCII{} characters, the return value
is the converted line, including a newline char. The length of
\var{data} should be at most 45.
\end{funcdesc}

\begin{funcdesc}{a2b_base64}{string}
Convert a block of base64 data back to binary and return the
binary data. More than one line may be passed at a time.
\end{funcdesc}

\begin{funcdesc}{b2a_base64}{data}
Convert binary data to a line of \ASCII{} characters in base64 coding.
The return value is the converted line, including a newline char.
The length of \var{data} should be at most 57 to adhere to the base64
standard.
\end{funcdesc}

\begin{funcdesc}{a2b_qp}{string\optional{, header}}
Convert a block of quoted-printable data back to binary and return the
binary data. More than one line may be passed at a time.
If the optional argument \var{header} is present and true, underscores
will be decoded as spaces.
\end{funcdesc}

\begin{funcdesc}{b2a_qp}{data\optional{, quotetabs, istext, header}}
Convert binary data to a line(s) of \ASCII{} characters in
quoted-printable encoding.  The return value is the converted line(s).
If the optional argument \var{quotetabs} is present and true, all tabs
and spaces will be encoded.  If the optional argument \var{header} is
present and true, spaces will be encoded as underscores per RFC1522.
If the optional argument \var{header} is present and false, newline
characters will be encoded as well, otherwise linefeed conversion might
corrupt the binary data stream.
\end{funcdesc}

\begin{funcdesc}{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 the last portion of the binhex4 data)
have the remaining bits zero.
\end{funcdesc}

\begin{funcdesc}{rledecode_hqx}{data}
Perform RLE-decompression on the data, as per the binhex4
standard. The algorithm uses \code{0x90} after a byte as a repeat
indicator, followed by a count. A count of \code{0} specifies a byte
value of \code{0x90}. The routine returns the decompressed data,
unless data input data ends in an orphaned repeat indicator, in which
case the \exception{Incomplete} exception is raised.
\end{funcdesc}

\begin{funcdesc}{rlecode_hqx}{data}
Perform binhex4 style RLE-compression on \var{data} and return the
result.
\end{funcdesc}

\begin{funcdesc}{b2a_hqx}{data}
Perform hexbin4 binary-to-\ASCII{} translation and return the
resulting string. The argument should already be RLE-coded, and have a
length divisible by 3 (except possibly the last fragment).
\end{funcdesc}

\begin{funcdesc}{crc_hqx}{data, crc}
Compute the binhex4 crc value of \var{data}, starting with an initial
\var{crc} and returning the result.
\end{funcdesc}

\begin{funcdesc}{crc32}{data\optional{, crc}}
Compute CRC-32, the 32-bit checksum of data, starting with an initial
crc.  This is consistent with the ZIP file checksum.  Since the
algorithm is designed for use as a checksum algorithm, it is not
suitable for use as a general hash algorithm.  Use as follows:
\begin{verbatim}
    print binascii.crc32("hello world")
    # Or, in two pieces:
    crc = binascii.crc32("hello")
    crc = binascii.crc32(" world", crc)
    print crc
\end{verbatim}
\end{funcdesc}
 
\begin{funcdesc}{b2a_hex}{data}
\funcline{hexlify}{data}
Return the hexadecimal representation of the binary \var{data}.  Every
byte of \var{data} is converted into the corresponding 2-digit hex
representation.  The resulting string is therefore twice as long as
the length of \var{data}.
\end{funcdesc}

\begin{funcdesc}{a2b_hex}{hexstr}
\funcline{unhexlify}{hexstr}
Return the binary data represented by the hexadecimal string
\var{hexstr}.  This function is the inverse of \function{b2a_hex()}.
\var{hexstr} must contain an even number of hexadecimal digits (which
can be upper or lower case), otherwise a \exception{TypeError} is
raised.
\end{funcdesc}

\begin{excdesc}{Error}
Exception raised on errors. These are usually programming errors.
\end{excdesc}

\begin{excdesc}{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.
\end{excdesc}


\begin{seealso}
  \seemodule{base64}{Support for base64 encoding used in MIME email messages.}

  \seemodule{binhex}{Support for the binhex format used on the Macintosh.}

  \seemodule{uu}{Support for UU encoding used on \UNIX.}

  \seemodule{quopri}{Support for quoted-printable encoding used in MIME email messages. }
\end{seealso}
