擅长:python、mysql、java
<p>您误解了<code>\xhh</code>在Python字符串中的作用。在Python字符串中使用<code>\x</code>表示法只是语法</em>来生成某些代码点。</p>
<p>您可以使用<code>'\x61'</code>来生成字符串,也可以使用<code>'a'</code>;这两种方法都只是两种说法:给我一个十六进制值为61的字符串,例如<code>a</code>ASCII字符:</p>
<pre><code>>>> '\x61'
'a'
>>> 'a'
'a'
>>> 'a' == '\x61'
True
</code></pre>
<p>那么<code>\xhh</code>语法是<em>而不是值</em>;在最终结果中没有<code>\</code>和<code>x</code>字符,也没有<code>6</code>和<code>1</code>字符。</p>
<p>你应该写下你的字符串:</p>
<pre><code>somestring = 'abcd'
with open("test.bin", "wb") as file:
file.write(somestring)
</code></pre>
<p>二进制文件没有什么神奇之处;与以文本模式打开的文件的唯一区别是,二进制文件不会自动将<code>\n</code>新行转换为平台的行分隔符标准;例如,在Windows上编写<code>\n</code>会生成<code>\r\n</code>。</p>
<p>您当然不必生成十六进制转义来写入二进制数据。</p>
<p>在Python 3上,字符串是Unicode数据,不能直接写入没有编码的文件,但是在Python上,<code>str</code>类型是<em>已经</em>编码的字节。因此,在Python 3上,您将使用:</p>
<pre><code>somestring = 'abcd'
with open("test.bin", "wb") as file:
file.write(somestring.encode('ascii'))
</code></pre>
<p>或者使用字节字符串文字;<code>b'abcd'</code>。</p>