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

2024-05-26 19:53:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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字符串来实现这一点呢?


Tags: 字符串testclosebin格式ascii二进制hexstr
2条回答

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

fp.write("abcd") 

完全等同于

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

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

您可以使用'\x61'来生成字符串,也可以使用'a';这两种方法都只是两种说法:给我一个十六进制值为61的字符串,例如aASCII字符:

>>> '\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'

相关问题 更多 >

    热门问题