在 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
也没有 6
和 1
字符。
你应该只写你的字符串:
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'
.
我有一个 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
也没有 6
和 1
字符。
你应该只写你的字符串:
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'
.