我有一个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字符串来实现这一点呢?
我认为你不一定了解什么是二进制/ascii。。。所有的文件都是二进制的,因为它们只是二进制的。ascii只是一些位的表示。。。99.9999%的文件编辑器会尽可能将您的位显示为ascii,如果文件本身没有声明其他编码。。。
完全等同于
您误解了
\xhh
在Python字符串中的作用。在Python字符串中使用\x
表示法只是语法来生成某些代码点。您可以使用
'\x61'
来生成字符串,也可以使用'a'
;这两种方法都只是两种说法:给我一个十六进制值为61的字符串,例如a
ASCII字符:那么
\xhh
语法是而不是值;在最终结果中没有\
和x
字符,也没有6
和1
字符。你应该写下你的字符串:
二进制文件没有什么神奇之处;与以文本模式打开的文件的唯一区别是,二进制文件不会自动将
\n
新行转换为平台的行分隔符标准;例如,在Windows上编写\n
会生成\r\n
。您当然不必生成十六进制转义来写入二进制数据。
在Python 3上,字符串是Unicode数据,不能直接写入没有编码的文件,但是在Python上,
str
类型是已经编码的字节。因此,在Python 3上,您将使用:或者使用字节字符串文字;
b'abcd'
。相关问题 更多 >
编程相关推荐