<p><code>C</code>、<code>e</code>和<code>/</code>也是字节;它们是ASCII字符,因此不需要用<code>\x..</code>十六进制转义符来显示。在</p>
<p>您也不需要解码<code>\x..</code>十六进制转义符,它们只是Python为您提供<code>bytes</code>对象的调试表示;每个字节要么显示为转义序列,要么显示为可打印的ASCII字母。在</p>
<p>同样的情况也会发生在你的<em>类似的例子中:</p>
<pre><code>>>> b'\x01\x03\x04\x43\x67\x81\xEC\x43\x68'
b'\x01\x03\x04Cg\x81\xecCh'
</code></pre>
<p>这是完全相同的值,但是<code>\x68</code>是ASCII字母<code>h</code>,等等</p>
<p>输出是<code>bytes</code>对象的默认<code>repr()</code>输出。它不能改变。如果需要不同的输出,则必须编写自己的代码。在</p>
<p>您可以使用<code>binascii.hexlify()</code>函数将所有字节显示为十六进制,例如:</p>
^{pr2}$
<p>现在您有了一个<code>bytes</code>字符串,其中包含十六进制字符</em>。或者您可以使用<code>str.join()</code>函数,将每个字节转换为十六进制,前缀为<code>\x</code>文本:</p>
<pre><code>>>> ''.join(r'\x{:02x}'.format(byte) for byte in b'\x01\x03\x04\x43\x67\x81\xEC\x43\x68')
</code></pre>
<p>\X604\X603\X603\X76\X76\</p>
<pre><code>>>> print(''.join(r'\x{:02x}'.format(byte) for byte in b'\x01\x03\x04\x43\x67\x81\xEC\x43\x68'))
\x01\x03\x04\x43\x67\x81\xec\x43\x68
</code></pre>
<p>这是一个<code>str</code>对象,以<code>\</code>、<code>x</code>和十六进制数字作为字符。在</p>
<p>注意,这只是<em>显示值</em>。值没有改变;字节都在那里,不管你怎么显示它们。如果需要将4个字节转换为浮点,则只需将这4个字节转换为:</p>
<pre><code>struct.unpack('f', yourbytes[4:]) # 4 bytes for C float in native order
</code></pre>
<p>它使用<a href="https://docs.python.org/3/library/struct.html" rel="nofollow">^{<cd18>} module</a>直接使用字节。不需要十六进制表示:</p>
<pre><code>>>> import struct
>>> struct.unpack('f', b'\x01\x03\x04Ce/\xec\xe2'[:4])
(132.01173400878906,)
</code></pre>