在python中将ASCII字符串写为二进制

aMa*_*aMa 8 python binary file fwrite

我有一个ASCII字符串="abcdefghijk".我想用python将它写成二进制格式的二进制文件.

我试过以下:

str  = "abcdefghijk"
fp = file("test.bin", "wb")
hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str)
fp.write(hexStr)
fp.close()
Run Code Online (Sandbox Code Playgroud)

但是,当我打开test.bin时,我看到以ascii格式而不是二进制格式.

\x61\x62\x63\x64\x65\x66\x67
Run Code Online (Sandbox Code Playgroud)

我理解它是因为这里有两个斜杠("\\ x%s").我该如何解决这个问题?提前致谢.

更新:

以下给出了预期的结果:

file = open("test.bin", "wb")
file.write("\x61\x62\x63\x64\x65\x66\x67")
file.close() 
Run Code Online (Sandbox Code Playgroud)

但是如何使用"abcdef"ASCII字符串实现此目的.?

Mar*_*ers 13

你误解了\xhhPython字符串中的内容.\x在Python字符串中使用表示法只是生成某些代码点的语法.

你可以'\x61'用来制作一个字符串,或者你可以使用'a'; 两种方式只是两种说法给我一个字符串,其中包含十六进制值为61的字符,例如aASCII字符:

>>> '\x61'
'a'
>>> 'a'
'a'
>>> 'a' == '\x61'
True
Run Code Online (Sandbox Code Playgroud)

\xhh随后的语法,是不是值 ; 最终结果中没有\,没有x,没有61性格.

你应该写你的字符串:

somestring = 'abcd'

with open("test.bin", "wb") as file:
    file.write(somestring)
Run Code Online (Sandbox Code Playgroud)

二进制文件没什么神奇之处; 与文本模式下打开的文件的唯一区别是二进制文件不会自动将\n换行符转换为您平台的行分隔符标准; 例如,在Windows上的写作\n产生\r\n代替.

您当然不必生成十六进制转义来写二进制数据.

在Python 3上,字符串是Unicode数据,不能在没有编码的情况下写入文件,但在Python上,str类型已经是编码字节.所以在Python 3上你会使用:

somestring = 'abcd'

with open("test.bin", "wb") as file:
    file.write(somestring.encode('ascii'))
Run Code Online (Sandbox Code Playgroud)

或者你使用字节串文字; b'abcd'.

  • @JoranBeasley:**不,你不能**。CPython 解释器 * 可能* 选择优化,你 * 可能* 最终得到相同的字符串对象(然后`is` 工作),但这是**不** 可取的,你不应该指望它。 (2认同)