Files
hustoj/web/python-docs/library/xdrlib.html
2025-03-09 17:10:56 +08:00

506 lines
37 KiB
HTML
Raw Permalink 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.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>xdrlib --- 编码与解码 XDR 数据 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="plistlib --- 生成与解析 Mac OS X .plist 文件" href="plistlib.html" />
<link rel="prev" title="netrc --- netrc 文件处理" href="netrc.html" />
<link rel="canonical" href="https://docs.python.org/3/library/xdrlib.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xdrlib</span></code> --- 编码与解码 XDR 数据</a><ul>
<li><a class="reference internal" href="#packer-objects">Packer 对象</a></li>
<li><a class="reference internal" href="#unpacker-objects">Unpacker 对象</a></li>
<li><a class="reference internal" href="#exceptions">异常</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="netrc.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">netrc</span></code> --- netrc 文件处理</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="plistlib.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">plistlib</span></code> --- 生成与解析 Mac OS X <code class="docutils literal notranslate"><span class="pre">.plist</span></code> 文件</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/xdrlib.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/library/xdrlib.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="plistlib.html" title="plistlib --- 生成与解析 Mac OS X .plist 文件"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="netrc.html" title="netrc --- netrc 文件处理"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="fileformats.html" accesskey="U">文件格式</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-xdrlib">
<span id="xdrlib-encode-and-decode-xdr-data"></span><h1><a class="reference internal" href="#module-xdrlib" title="xdrlib: Encoders and decoders for the External Data Representation (XDR)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xdrlib</span></code></a> --- 编码与解码 XDR 数据<a class="headerlink" href="#module-xdrlib" title="永久链接至标题"></a></h1>
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/xdrlib.py">Lib/xdrlib.py</a></p>
<hr class="docutils" id="index-0" />
<p><a class="reference internal" href="#module-xdrlib" title="xdrlib: Encoders and decoders for the External Data Representation (XDR)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xdrlib</span></code></a> 模块为外部数据表示标准提供支持,该标准的描述见 <span class="target" id="index-9"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc1014.html"><strong>RFC 1014</strong></a>,由 Sun Microsystems, Inc. 在 1987 年 6 月撰写。 它支持该 RFC 中描述的大部分数据类型。</p>
<p><a class="reference internal" href="#module-xdrlib" title="xdrlib: Encoders and decoders for the External Data Representation (XDR)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xdrlib</span></code></a> 模块定义了两个类,一个用于将变量打包为 XDR 表示形式,另一个用于从 XDR 表示形式解包。 此外还有两个异常类。</p>
<dl class="class">
<dt id="xdrlib.Packer">
<em class="property">class </em><code class="sig-prename descclassname">xdrlib.</code><code class="sig-name descname">Packer</code><a class="headerlink" href="#xdrlib.Packer" title="永久链接至目标"></a></dt>
<dd><p><a class="reference internal" href="#xdrlib.Packer" title="xdrlib.Packer"><code class="xref py py-class docutils literal notranslate"><span class="pre">Packer</span></code></a> 是用于将数据打包为 XDR 表示形式的类。 <a class="reference internal" href="#xdrlib.Packer" title="xdrlib.Packer"><code class="xref py py-class docutils literal notranslate"><span class="pre">Packer</span></code></a> 类的实例化不附带参数。</p>
</dd></dl>
<dl class="class">
<dt id="xdrlib.Unpacker">
<em class="property">class </em><code class="sig-prename descclassname">xdrlib.</code><code class="sig-name descname">Unpacker</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker" title="永久链接至目标"></a></dt>
<dd><p><code class="docutils literal notranslate"><span class="pre">Unpacker</span></code> 是用于相应地从字符串缓冲区解包 XDR 数据值的类。 输入缓冲区将作为 <em>data</em> 给出。</p>
</dd></dl>
<div class="admonition seealso">
<p class="admonition-title">参见</p>
<dl class="simple">
<dt><span class="target" id="index-10"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc1014.html"><strong>RFC 1014</strong></a> - XDR: 外部数据表示标准</dt><dd><p>这个 RFC 定义了最初编写此模块时 XDR 所用的数据编码格式。 显然它已被 <span class="target" id="index-11"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc1832.html"><strong>RFC 1832</strong></a> 所淘汰。</p>
</dd>
<dt><span class="target" id="index-12"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc1832.html"><strong>RFC 1832</strong></a> - XDR: 外部数据表示标准</dt><dd><p>更新的 RFC它提供了经修订的 XDR 定义。</p>
</dd>
</dl>
</div>
<section id="packer-objects">
<span id="xdr-packer-objects"></span><h2>Packer 对象<a class="headerlink" href="#packer-objects" title="永久链接至标题"></a></h2>
<p><a class="reference internal" href="#xdrlib.Packer" title="xdrlib.Packer"><code class="xref py py-class docutils literal notranslate"><span class="pre">Packer</span></code></a> 实例具有下列方法:</p>
<dl class="method">
<dt id="xdrlib.Packer.get_buffer">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">get_buffer</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.get_buffer" title="永久链接至目标"></a></dt>
<dd><p>将当前打包缓冲区以字符串的形式返回。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.reset">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">reset</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.reset" title="永久链接至目标"></a></dt>
<dd><p>将打包缓冲区重置为空字符串。</p>
</dd></dl>
<p>总体来说,你可以通过调用适当的 <code class="docutils literal notranslate"><span class="pre">pack_type()</span></code> 方法来打包任何最常见的 XDR 数据类型。 每个方法都是接受单个参数,即要打包的值。 受支持的简单数据类型打包方法如下: <code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_uint()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_int()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_enum()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_bool()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_uhyper()</span></code> 以及 <code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_hyper()</span></code></p>
<dl class="method">
<dt id="xdrlib.Packer.pack_float">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_float</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_float" title="永久链接至目标"></a></dt>
<dd><p>打包单精度浮点数 <em>value</em></p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_double">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_double</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_double" title="永久链接至目标"></a></dt>
<dd><p>打包双精度浮点数 <em>value</em></p>
</dd></dl>
<p>以下方法支持打包字符串、字节串以及不透明数据。</p>
<dl class="method">
<dt id="xdrlib.Packer.pack_fstring">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_fstring</code><span class="sig-paren">(</span><em class="sig-param">n</em>, <em class="sig-param">s</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_fstring" title="永久链接至目标"></a></dt>
<dd><p>打包固定长度字符串 <em>s</em><em>n</em> 为字符串的长度,但它 <em>不会</em> 被打包进数据缓冲区。 如有必要字符串会以空字节串填充以保证 4 字节对齐。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_fopaque">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_fopaque</code><span class="sig-paren">(</span><em class="sig-param">n</em>, <em class="sig-param">data</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_fopaque" title="永久链接至目标"></a></dt>
<dd><p>打包固定长度不透明数据流,类似于 <a class="reference internal" href="#xdrlib.Packer.pack_fstring" title="xdrlib.Packer.pack_fstring"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_fstring()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_string">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_string</code><span class="sig-paren">(</span><em class="sig-param">s</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_string" title="永久链接至目标"></a></dt>
<dd><p>打包可变长度字符串 <em>s</em>。 先将字符串的长度打包为无符号整数,再用 <a class="reference internal" href="#xdrlib.Packer.pack_fstring" title="xdrlib.Packer.pack_fstring"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_fstring()</span></code></a> 来打包字符串数据。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_opaque">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_opaque</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_opaque" title="永久链接至目标"></a></dt>
<dd><p>打包可变长度不透明数据流,类似于 <a class="reference internal" href="#xdrlib.Packer.pack_string" title="xdrlib.Packer.pack_string"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_string()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_bytes">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_bytes</code><span class="sig-paren">(</span><em class="sig-param">bytes</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_bytes" title="永久链接至目标"></a></dt>
<dd><p>打包可变长度字节流,类似于 <a class="reference internal" href="#xdrlib.Packer.pack_string" title="xdrlib.Packer.pack_string"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_string()</span></code></a></p>
</dd></dl>
<p>下列方法支持打包数组和列表:</p>
<dl class="method">
<dt id="xdrlib.Packer.pack_list">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_list</code><span class="sig-paren">(</span><em class="sig-param">list</em>, <em class="sig-param">pack_item</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_list" title="永久链接至目标"></a></dt>
<dd><p>打包由同质条目构成的 <em>list</em>。 此方法适用于不确定长度的列表;即其长度无法在遍历整个列表之前获知。 对于列表中的每个条目,先打包一个无符号整数 <code class="docutils literal notranslate"><span class="pre">1</span></code>,再添加列表中数据的值。 <em>pack_item</em> 是在打包单个条目时要调用的函数。 在列表的末尾,会再打包一个无符号整数 <code class="docutils literal notranslate"><span class="pre">0</span></code></p>
<p>例如,要打包一个整数列表,代码看起来会是这样:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xdrlib</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">xdrlib</span><span class="o">.</span><span class="n">Packer</span><span class="p">()</span>
<span class="n">p</span><span class="o">.</span><span class="n">pack_list</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="n">p</span><span class="o">.</span><span class="n">pack_int</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_farray">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_farray</code><span class="sig-paren">(</span><em class="sig-param">n</em>, <em class="sig-param">array</em>, <em class="sig-param">pack_item</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_farray" title="永久链接至目标"></a></dt>
<dd><p>打包由同质条目构成的固定长度列表 (<em>array</em>)。 <em>n</em> 为列表长度;它 <em>不会</em> 被打包到缓冲区,但是如果 <code class="docutils literal notranslate"><span class="pre">len(array)</span></code> 不等于 <em>n</em> 则会引发 <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a>。 如上所述,<em>pack_item</em> 是在打包每个元素时要使用的函数。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Packer.pack_array">
<code class="sig-prename descclassname">Packer.</code><code class="sig-name descname">pack_array</code><span class="sig-paren">(</span><em class="sig-param">list</em>, <em class="sig-param">pack_item</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Packer.pack_array" title="永久链接至目标"></a></dt>
<dd><p>打包由同质条目构成的可变长度 <em>list</em>。 先将列表的长度打包为无符号整数,再像上面的 <a class="reference internal" href="#xdrlib.Packer.pack_farray" title="xdrlib.Packer.pack_farray"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pack_farray()</span></code></a> 一样打包每个元素。</p>
</dd></dl>
</section>
<section id="unpacker-objects">
<span id="xdr-unpacker-objects"></span><h2>Unpacker 对象<a class="headerlink" href="#unpacker-objects" title="永久链接至标题"></a></h2>
<p><a class="reference internal" href="#xdrlib.Unpacker" title="xdrlib.Unpacker"><code class="xref py py-class docutils literal notranslate"><span class="pre">Unpacker</span></code></a> 类提供以下方法:</p>
<dl class="method">
<dt id="xdrlib.Unpacker.reset">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">reset</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.reset" title="永久链接至目标"></a></dt>
<dd><p>使用给定的 <em>data</em> 重置字符串缓冲区。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.get_position">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">get_position</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.get_position" title="永久链接至目标"></a></dt>
<dd><p>返回数据缓冲区中的当前解包位置。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.set_position">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">set_position</code><span class="sig-paren">(</span><em class="sig-param">position</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.set_position" title="永久链接至目标"></a></dt>
<dd><p>将数据缓冲区的解包位置设为 <em>position</em>。 你应当小心使用 <a class="reference internal" href="#xdrlib.Unpacker.get_position" title="xdrlib.Unpacker.get_position"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get_position()</span></code></a><a class="reference internal" href="#xdrlib.Unpacker.set_position" title="xdrlib.Unpacker.set_position"><code class="xref py py-meth docutils literal notranslate"><span class="pre">set_position()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.get_buffer">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">get_buffer</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.get_buffer" title="永久链接至目标"></a></dt>
<dd><p>将当前解包数据缓冲区以字符串的形式返回。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.done">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">done</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.done" title="永久链接至目标"></a></dt>
<dd><p>表明解包完成。 如果数据没有全部完成解包则会引发 <a class="reference internal" href="#xdrlib.Error" title="xdrlib.Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code></a> 异常。</p>
</dd></dl>
<p>此外,每种可通过 <a class="reference internal" href="#xdrlib.Packer" title="xdrlib.Packer"><code class="xref py py-class docutils literal notranslate"><span class="pre">Packer</span></code></a> 打包的数据类型都可通过 <a class="reference internal" href="#xdrlib.Unpacker" title="xdrlib.Unpacker"><code class="xref py py-class docutils literal notranslate"><span class="pre">Unpacker</span></code></a> 来解包。 解包方法的形式为 <code class="docutils literal notranslate"><span class="pre">unpack_type()</span></code>,并且不接受任何参数。 该方法将返回解包后的对象。</p>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_float">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_float</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_float" title="永久链接至目标"></a></dt>
<dd><p>解包单精度浮点数。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_double">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_double</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_double" title="永久链接至目标"></a></dt>
<dd><p>解包双精度浮点数,类似于 <a class="reference internal" href="#xdrlib.Unpacker.unpack_float" title="xdrlib.Unpacker.unpack_float"><code class="xref py py-meth docutils literal notranslate"><span class="pre">unpack_float()</span></code></a></p>
</dd></dl>
<p>此外,以下方法可用来解包字符串、字节串以及不透明数据:</p>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_fstring">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_fstring</code><span class="sig-paren">(</span><em class="sig-param">n</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_fstring" title="永久链接至目标"></a></dt>
<dd><p>解包并返回固定长度字符串。 <em>n</em> 为期望的字符数量。 会预设以空字节串填充以保证 4 字节对齐。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_fopaque">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_fopaque</code><span class="sig-paren">(</span><em class="sig-param">n</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_fopaque" title="永久链接至目标"></a></dt>
<dd><p>解包并返回固定长度数据流,类似于 <a class="reference internal" href="#xdrlib.Unpacker.unpack_fstring" title="xdrlib.Unpacker.unpack_fstring"><code class="xref py py-meth docutils literal notranslate"><span class="pre">unpack_fstring()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_string">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_string" title="永久链接至目标"></a></dt>
<dd><p>解包并返回可变长度字符串。 先将字符串的长度解包为无符号整数,再用 <a class="reference internal" href="#xdrlib.Unpacker.unpack_fstring" title="xdrlib.Unpacker.unpack_fstring"><code class="xref py py-meth docutils literal notranslate"><span class="pre">unpack_fstring()</span></code></a> 来解包字符串数据。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_opaque">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_opaque</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_opaque" title="永久链接至目标"></a></dt>
<dd><p>解包并返回可变长度不透明数据流,类似于 <a class="reference internal" href="#xdrlib.Unpacker.unpack_string" title="xdrlib.Unpacker.unpack_string"><code class="xref py py-meth docutils literal notranslate"><span class="pre">unpack_string()</span></code></a></p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_bytes">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_bytes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_bytes" title="永久链接至目标"></a></dt>
<dd><p>解包并返回可变长度字节流,类似于 <a class="reference internal" href="#xdrlib.Unpacker.unpack_string" title="xdrlib.Unpacker.unpack_string"><code class="xref py py-meth docutils literal notranslate"><span class="pre">unpack_string()</span></code></a></p>
</dd></dl>
<p>下列方法支持解包数组和列表:</p>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_list">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_list</code><span class="sig-paren">(</span><em class="sig-param">unpack_item</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_list" title="永久链接至目标"></a></dt>
<dd><p>解包并返回同质条目的列表。 该列表每次解包一个元素,先解包一个无符号整数旗标。 如果旗标为 <code class="docutils literal notranslate"><span class="pre">1</span></code>,则解包条目并将其添加到列表。 旗标为 <code class="docutils literal notranslate"><span class="pre">0</span></code> 表明列表结束。 <em>unpack_item</em> 为在解包条目时调用的函数。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_farray">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_farray</code><span class="sig-paren">(</span><em class="sig-param">n</em>, <em class="sig-param">unpack_item</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_farray" title="永久链接至目标"></a></dt>
<dd><p>解包并(以列表形式)返回由同质条目构成的固定长度数组。 <em>n</em> 为期望的缓冲区内列表元素数量。 如上所述,<em>unpack_item</em> 是解包每个元素时要使用的函数。</p>
</dd></dl>
<dl class="method">
<dt id="xdrlib.Unpacker.unpack_array">
<code class="sig-prename descclassname">Unpacker.</code><code class="sig-name descname">unpack_array</code><span class="sig-paren">(</span><em class="sig-param">unpack_item</em><span class="sig-paren">)</span><a class="headerlink" href="#xdrlib.Unpacker.unpack_array" title="永久链接至目标"></a></dt>
<dd><p>解包并返回由同质条目构成的可变长度 <em>list</em>。 先将列表的长度解包为无符号整数,再像上面的 <a class="reference internal" href="#xdrlib.Unpacker.unpack_farray" title="xdrlib.Unpacker.unpack_farray"><code class="xref py py-meth docutils literal notranslate"><span class="pre">unpack_farray()</span></code></a> 一样解包每个元素。</p>
</dd></dl>
</section>
<section id="exceptions">
<span id="xdr-exceptions"></span><h2>异常<a class="headerlink" href="#exceptions" title="永久链接至标题"></a></h2>
<p>此模块中的异常会表示为类实例代码:</p>
<dl class="exception">
<dt id="xdrlib.Error">
<em class="property">exception </em><code class="sig-prename descclassname">xdrlib.</code><code class="sig-name descname">Error</code><a class="headerlink" href="#xdrlib.Error" title="永久链接至目标"></a></dt>
<dd><p>基本异常类。 <a class="reference internal" href="#xdrlib.Error" title="xdrlib.Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code></a> 具有一个公共属性 <code class="xref py py-attr docutils literal notranslate"><span class="pre">msg</span></code>,其中包含对错误的描述。</p>
</dd></dl>
<dl class="exception">
<dt id="xdrlib.ConversionError">
<em class="property">exception </em><code class="sig-prename descclassname">xdrlib.</code><code class="sig-name descname">ConversionError</code><a class="headerlink" href="#xdrlib.ConversionError" title="永久链接至目标"></a></dt>
<dd><p><a class="reference internal" href="#xdrlib.Error" title="xdrlib.Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code></a> 所派生的类。 不包含额外的实例变量。</p>
</dd></dl>
<p>以下是一个应该如何捕获这些异常的示例:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xdrlib</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">xdrlib</span><span class="o">.</span><span class="n">Packer</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">p</span><span class="o">.</span><span class="n">pack_double</span><span class="p">(</span><span class="mf">8.01</span><span class="p">)</span>
<span class="k">except</span> <span class="n">xdrlib</span><span class="o">.</span><span class="n">ConversionError</span> <span class="k">as</span> <span class="n">instance</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;packing the double failed:&#39;</span><span class="p">,</span> <span class="n">instance</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xdrlib</span></code> --- 编码与解码 XDR 数据</a><ul>
<li><a class="reference internal" href="#packer-objects">Packer 对象</a></li>
<li><a class="reference internal" href="#unpacker-objects">Unpacker 对象</a></li>
<li><a class="reference internal" href="#exceptions">异常</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="netrc.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">netrc</span></code> --- netrc 文件处理</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="plistlib.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">plistlib</span></code> --- 生成与解析 Mac OS X <code class="docutils literal notranslate"><span class="pre">.plist</span></code> 文件</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/xdrlib.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="plistlib.html" title="plistlib --- 生成与解析 Mac OS X .plist 文件"
>下一页</a> |</li>
<li class="right" >
<a href="netrc.html" title="netrc --- netrc 文件处理"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="fileformats.html" >文件格式</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>