mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
6 lines
17 KiB
HTML
6 lines
17 KiB
HTML
<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">crc32(data)</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">支持基于16,32,64和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> |