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

时间:2015-03-19 17:26:52

标签: python file binary 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()

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

\x61\x62\x63\x64\x65\x66\x67

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

更新:

以下给出了预期的结果:

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

但我如何用" abcdef"来实现这个目标。 ASCII字符串。 ?

2 个答案:

答案 0 :(得分:12)

你误解了\xhh在Python字符串中的作用。在Python字符串中使用\x表示法只是语法以生成某些代码点。

您可以使用'\x61'生成字符串,也可以使用'a';两种方式都只是说两种方式给我一个字符串,其中包含一个十六进制值为61的字符,例如a ASCII字符

>>> '\x61'
'a'
>>> 'a'
'a'
>>> 'a' == '\x61'
True

然后,\xhh语法不是值;最终结果中没有\且没有x且没有61字符。

你应该只写你的字符串

somestring = 'abcd'

with open("test.bin", "wb") as file:
    file.write(somestring)

二进制文件没有什么神奇之处;与文本模式下打开的文件唯一不同的是,二进制文件不会自动将\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'))

或者您使用字节字符串文字; b'abcd'

答案 1 :(得分:2)

我认为你不一定了解二进制文件/ ascii是什么...所有文件都是二进制的,只是它的位。 ascii只是一些位的表示...如果可以的话,99.9999%的文件编辑器会将您的位显示为ascii,如果文件本身没有声明其他编码...

fp.write("abcd") 

完全等同于

fp.write("\x61\x62\x63\x64")