uTools-Manuals/docs/python/binascii.html
2019-04-08 23:22:26 +08:00

6 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-binascii"><h1><span class="yiyi-st" id="yiyi-10">19.8。 <a class="reference internal" href="#module-binascii" title="binascii: Tools for converting between binary and various ASCII-encoded binary representations."><code class="xref py py-mod docutils literal"><span class="pre">binascii</span></code></a> - 在二进制和ASCII之间转换</span></h1><p><span class="yiyi-st" id="yiyi-11"><a class="reference internal" href="#module-binascii" title="binascii: Tools for converting between binary and various ASCII-encoded binary representations."><code class="xref py py-mod docutils literal"><span class="pre">binascii</span></code></a>模块包含许多在二进制和各种ASCII编码二进制表示之间转换的方法。</span><span class="yiyi-st" id="yiyi-12">通常,您不会直接使用这些函数,而使用封装过的模块,例如<a class="reference internal" href="uu.html#module-uu" title="uu: Encode and decode files in uuencode format."><code class="xref py py-mod docutils literal"><span class="pre">uu</span></code></a><a class="reference internal" href="base64.html#module-base64" title="base64: RFC 3548: Base16, Base32, Base64 Data Encodings; Base85 and Ascii85"><code class="xref py py-mod docutils literal"><span class="pre">base64</span></code></a><a class="reference internal" href="binhex.html#module-binhex" title="binhex: Encode and decode files in binhex4 format."><code class="xref py py-mod docutils literal"><span class="pre">binhex</span></code></a></span><span class="yiyi-st" id="yiyi-13"><a class="reference internal" href="#module-binascii" title="binascii: Tools for converting between binary and various ASCII-encoded binary representations."><code class="xref py py-mod docutils literal"><span class="pre">binascii</span></code></a>模块包含用C编写的低级函数用于更高的速度由更高级别的模块调用。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-14">注意</span></p><p><span class="yiyi-st" id="yiyi-15"><code class="docutils literal"><span class="pre">a2b_*</span></code>函数接受仅包含ASCII字符的Unicode字符串。</span><span class="yiyi-st" id="yiyi-16">其他函数只接受<a class="reference internal" href="../glossary.html#term-bytes-like-object"><span class="xref std std-term">bytes-like objects</span></a>(例如<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a><a class="reference internal" href="functions.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal"><span class="pre">bytearray</span></code></a>和其他支持缓冲区协议的对象)。</span></p><div class="last versionchanged"><p><span class="yiyi-st" id="yiyi-17"><span class="versionmodified">在版本3.3中更改:</span>现在,<code class="docutils literal"><span class="pre">a2b_*</span></code>函数接受仅ASCII Unicode字符串。</span></p></div></div><p><span class="yiyi-st" id="yiyi-18"><a class="reference internal" href="#module-binascii" title="binascii: Tools for converting between binary and various ASCII-encoded binary representations."><code class="xref py py-mod docutils literal"><span class="pre">binascii</span></code></a>模块定义以下函数:</span></p><dl class="function"><dt id="binascii.a2b_uu"><span class="yiyi-st" id="yiyi-19"> <code class="descclassname">binascii.</code><code class="descname">a2b_uu</code><span class="sig-paren">(</span><em>string</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-20">将单行的uuencoded数据转换回二进制并返回二进制数据。</span><span class="yiyi-st" id="yiyi-21">行通常包含45二进制字节除了最后一行。</span><span class="yiyi-st" id="yiyi-22">行数据后面可以跟空格。</span></p></dd></dl><dl class="function"><dt id="binascii.b2a_uu"><span class="yiyi-st" id="yiyi-23"> <code class="descclassname">binascii.</code><code class="descname">b2a_uu</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-24">将二进制数据转换为一行ASCII字符返回值是转换后的行包括换行符。</span><span class="yiyi-st" id="yiyi-25"><em>数据</em>的长度应至多为45。</span></p></dd></dl><dl class="function"><dt id="binascii.a2b_base64"><span class="yiyi-st" id="yiyi-26"> <code class="descclassname">binascii.</code><code class="descname">a2b_base64</code><span class="sig-paren">(</span><em>string</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-27">将一个base64数据块转换回二进制并返回二进制数据。</span><span class="yiyi-st" id="yiyi-28">一次可以传递多于一行。</span></p></dd></dl><dl class="function"><dt id="binascii.b2a_base64"><span class="yiyi-st" id="yiyi-29"> <code class="descclassname">binascii.</code><code class="descname">b2a_base64</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-30">在base64编码中将二进制数据转换为一行ASCII字符。</span><span class="yiyi-st" id="yiyi-31">返回值是转换后的行,包括换行符。</span><span class="yiyi-st" id="yiyi-32">添加换行符是因为该函数的原始用例是给它一系列57字节的输入行以获得符合MIME-base64标准的输出行。</span><span class="yiyi-st" id="yiyi-33">否则输出符合<span class="target" id="index-1"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3548.html"><strong>RFC 3548</strong></a></span></p></dd></dl><dl class="function"><dt id="binascii.a2b_qp"><span class="yiyi-st" id="yiyi-34"> <code class="descclassname">binascii.</code><code class="descname">a2b_qp</code><span class="sig-paren">(</span><em>data</em>, <em>header=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-35">将一组引用可打印数据转换回二进制并返回二进制数据。</span><span class="yiyi-st" id="yiyi-36">一次可以传递多于一行。</span><span class="yiyi-st" id="yiyi-37">如果可选参数<em></em>存在且为真,则下划线将解释为空格。</span></p></dd></dl><dl class="function"><dt id="binascii.b2a_qp"><span class="yiyi-st" id="yiyi-38"> <code class="descclassname">binascii.</code><code class="descname">b2a_qp</code><span class="sig-paren">(</span><em>data</em>, <em>quotetabs=False</em>, <em>istext=True</em>, <em>header=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-39">将二进制数据转换为带引号的可打印编码中的ASCII字符行。</span><span class="yiyi-st" id="yiyi-40">返回值是转换后的行。</span><span class="yiyi-st" id="yiyi-41">如果可选参数<em>quotetabs</em>存在且为true则所有制表符和空格都将被编码。</span><span class="yiyi-st" id="yiyi-42">如果可选参数<em>istext</em>存在且为真,则不会对换行符进行编码,而会对尾部空格进行编码。</span><span class="yiyi-st" id="yiyi-43">如果可选参数<em></em>存在且为真则根据RFC1522空格将编码为下划线。</span><span class="yiyi-st" id="yiyi-44">如果可选参数<em></em>存在且为假,则换行符也将被编码;否则换行可能会破坏二进制数据流。</span></p></dd></dl><dl class="function"><dt id="binascii.a2b_hqx"><span class="yiyi-st" id="yiyi-45"> <code class="descclassname">binascii.</code><code class="descname">a2b_hqx</code><span class="sig-paren">(</span><em>string</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-46">将binhex4格式的ASCII数据转换为二进制不进行RLE解压缩。</span><span class="yiyi-st" id="yiyi-47">字符串应该包含完整数量的二进制字节或者在binhex4数据的最后部分的情况下具有剩余位零。</span></p></dd></dl><dl class="function"><dt id="binascii.rledecode_hqx"><span class="yiyi-st" id="yiyi-48"> <code class="descclassname">binascii.</code><code class="descname">rledecode_hqx</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-49">按照binhex4标准对数据执行RLE解压缩。</span><span class="yiyi-st" id="yiyi-50">该算法在一个字节之后使用<code class="docutils literal"><span class="pre">0x90</span></code>作为重复指示符,后跟计数。</span><span class="yiyi-st" id="yiyi-51">计数<code class="docutils literal"><span class="pre">0</span></code>指定<code class="docutils literal"><span class="pre">0x90</span></code>的字节值。</span><span class="yiyi-st" id="yiyi-52">该例程返回解压缩的数据,除非数据输入数据以孤立的重复指示符结束,在这种情况下,会出现<a class="reference internal" href="#binascii.Incomplete" title="binascii.Incomplete"><code class="xref py py-exc docutils literal"><span class="pre">Incomplete</span></code></a>异常。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-53"><span class="versionmodified">在版本3.2中更改:</span>仅接受bytestring或bytearray对象作为输入。</span></p></div></dd></dl><dl class="function"><dt id="binascii.rlecode_hqx"><span class="yiyi-st" id="yiyi-54"> <code class="descclassname">binascii.</code><code class="descname">rlecode_hqx</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-55"><em>数据</em>执行binhex4样式RLE压缩并返回结果。</span></p></dd></dl><dl class="function"><dt id="binascii.b2a_hqx"><span class="yiyi-st" id="yiyi-56"> <code class="descclassname">binascii.</code><code class="descname">b2a_hqx</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-57">执行hexbin4二进制到ASCII的转换并返回结果字符串。</span><span class="yiyi-st" id="yiyi-58">参数应该已经是RLE编码的并且具有可被3整除的长度除了可能的最后一个片段</span></p></dd></dl><dl class="function"><dt id="binascii.crc_hqx"><span class="yiyi-st" id="yiyi-59"> <code class="descclassname">binascii.</code><code class="descname">crc_hqx</code><span class="sig-paren">(</span><em>data</em>, <em>value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-60">计算<em>数据</em>的binhex4 crc值<em></em>开始作为初始crc并返回结果。</span></p></dd></dl><dl class="function"><dt id="binascii.crc32"><span class="yiyi-st" id="yiyi-61"> <code class="descclassname">binascii.</code><code class="descname">crc32</code><span class="sig-paren">(</span><em>data</em><span class="optional">[</span>, <em>value</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-62"><em></em>的初始CRC开始计算<em>数据</em>的32位校验和CRC-32。</span><span class="yiyi-st" id="yiyi-63">默认的初始CRC为零。</span><span class="yiyi-st" id="yiyi-64">该算法与ZIP文件校验和一致。</span><span class="yiyi-st" id="yiyi-65">由于算法被设计为用作校验和算法,所以它不适合用作一般的哈希算法。</span><span class="yiyi-st" id="yiyi-66">使用方法如下:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">binascii</span><span class="o">.</span><span class="n">crc32</span><span class="p">(</span><span class="n">b</span><span class="s2">"hello world"</span><span class="p">))</span>
<span class="c1"># Or, in two pieces:</span>
<span class="n">crc</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">crc32</span><span class="p">(</span><span class="n">b</span><span class="s2">"hello"</span><span class="p">)</span>
<span class="n">crc</span> <span class="o">=</span> <span class="n">binascii</span><span class="o">.</span><span class="n">crc32</span><span class="p">(</span><span class="n">b</span><span class="s2">" world"</span><span class="p">,</span> <span class="n">crc</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'crc32 = </span><span class="si">{:#010x}</span><span class="s1">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">crc</span><span class="p">))</span>
</pre></div></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-67"><span class="versionmodified">在3.0版中更改:</span>结果始终为无符号。</span><span class="yiyi-st" id="yiyi-68">要在所有Python版本和平台上生成相同的数值请使用<code class="docutils literal"><span class="pre">crc32data</span> <span class="pre">amp</span> <span class="pre">0xffffffff</span></code></span></p></div></dd></dl><dl class="function"><dt id="binascii.b2a_hex"><span class="yiyi-st" id="yiyi-69"> <code class="descclassname">binascii.</code><code class="descname">b2a_hex</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dt id="binascii.hexlify"><span class="yiyi-st" id="yiyi-70"> <code class="descclassname">binascii.</code><code class="descname">hexlify</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-71">返回二进制<em>数据</em>的十六进制表示。</span><span class="yiyi-st" id="yiyi-72"><em>数据</em>的每个字节都转换为相应的2位十六进制表示。</span><span class="yiyi-st" id="yiyi-73">因此返回的字节对象的长度是<em>数据</em>的长度的两倍。</span></p></dd></dl><dl class="function"><dt id="binascii.a2b_hex"><span class="yiyi-st" id="yiyi-74"> <code class="descclassname">binascii.</code><code class="descname">a2b_hex</code><span class="sig-paren">(</span><em>hexstr</em><span class="sig-paren">)</span></span></dt><dt id="binascii.unhexlify"><span class="yiyi-st" id="yiyi-75"> <code class="descclassname">binascii.</code><code class="descname">unhexlify</code><span class="sig-paren">(</span><em>hexstr</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-76">返回由十六进制字符串<em>hexstr</em>表示的二进制数据。</span><span class="yiyi-st" id="yiyi-77">此函数是<a class="reference internal" href="#binascii.b2a_hex" title="binascii.b2a_hex"><code class="xref py py-func docutils literal"><span class="pre">b2a_hex()</span></code></a>的反向函数。</span><span class="yiyi-st" id="yiyi-78"><em>hexstr</em>必须包含偶数个十六进制数字(可以是大写或小写),否则会引发<a class="reference internal" href="#binascii.Error" title="binascii.Error"><code class="xref py py-exc docutils literal"><span class="pre">Error</span></code></a>异常。</span></p></dd></dl><dl class="exception"><dt id="binascii.Error"><span class="yiyi-st" id="yiyi-79"> <em class="property">exception </em><code class="descclassname">binascii.</code><code class="descname">Error</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-80">出现错误时抛出异常。</span><span class="yiyi-st" id="yiyi-81">这些通常是编程错误。</span></p></dd></dl><dl class="exception"><dt id="binascii.Incomplete"><span class="yiyi-st" id="yiyi-82"> <em class="property">exception </em><code class="descclassname">binascii.</code><code class="descname">Incomplete</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-83">对不完整的数据产生异常。</span><span class="yiyi-st" id="yiyi-84">这些通常不是编程错误,但可以通过读取更多的数据并再次尝试来处理。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-85">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-86">模块<a class="reference internal" href="base64.html#module-base64" title="base64: RFC 3548: Base16, Base32, Base64 Data Encodings; Base85 and Ascii85"><code class="xref py py-mod docutils literal"><span class="pre">base64</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-87">支持基于163264和85的符合RFC的base64样式编码。</span></dd><dt><span class="yiyi-st" id="yiyi-88">模块<a class="reference internal" href="binhex.html#module-binhex" title="binhex: Encode and decode files in binhex4 format."><code class="xref py py-mod docutils literal"><span class="pre">binhex</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-89">支持在Macintosh上使用的binhex格式。</span></dd><dt><span class="yiyi-st" id="yiyi-90">模块<a class="reference internal" href="uu.html#module-uu" title="uu: Encode and decode files in uuencode format."><code class="xref py py-mod docutils literal"><span class="pre">uu</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-91">支持在Unix上使用的UU编码。</span></dd><dt><span class="yiyi-st" id="yiyi-92">模块<a class="reference internal" href="quopri.html#module-quopri" title="quopri: Encode and decode files using the MIME quoted-printable encoding."><code class="xref py py-mod docutils literal"><span class="pre">quopri</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-93">支持MIME电子邮件中使用的引用可打印编码。</span></dd></dl></div></div></div>