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

Writing an ASCII string as binary in 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 字符串实现此目的。 ?

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

fp.write("abcd") 

完全等同于

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

您误解了 \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'.