将十六进制字符串写入二进制文件
Writing hex string into a binary file
我正在尝试使用 python 2.7 将十六进制字符串写入文件,以便在使用 HxD 打开时我可以检索相同的十六进制值。
以下代码在多个输入字符串上工作正常,但当字符串包含“0A”时,写入工作不正常。
import binascii
s = "0ABD"
f = open("output","w")
f.write(binascii.a2b_hex(s))
f.close()
然后使用HxD或在线打开文件https://hexed.it/,你会发现在每个'0A'之前都添加了'0D'。
我正在使用 vb.net 读取这些生成的文件,但我得到的字节数仍然比预期的多。
您正在以文本模式打开文件进行写入,因此换行符被转换为使用系统约定。在 Windows 的情况下,0A
或 '\n'
被转换为 0D 0A
或 '\r\n'
。
来自python's documentation for open()(强调补充):
If mode is omitted, it defaults to 'r'. The default is to use text mode, which may convert '\n'
characters to a platform-specific representation on writing and back on reading. Thus, when opening a binary file, you should append 'b'
to the mode value to open the file in binary mode, which will improve portability.
以二进制模式打开文件。
f = open("output", "wb")
我正在尝试使用 python 2.7 将十六进制字符串写入文件,以便在使用 HxD 打开时我可以检索相同的十六进制值。 以下代码在多个输入字符串上工作正常,但当字符串包含“0A”时,写入工作不正常。
import binascii
s = "0ABD"
f = open("output","w")
f.write(binascii.a2b_hex(s))
f.close()
然后使用HxD或在线打开文件https://hexed.it/,你会发现在每个'0A'之前都添加了'0D'。 我正在使用 vb.net 读取这些生成的文件,但我得到的字节数仍然比预期的多。
您正在以文本模式打开文件进行写入,因此换行符被转换为使用系统约定。在 Windows 的情况下,0A
或 '\n'
被转换为 0D 0A
或 '\r\n'
。
来自python's documentation for open()(强调补充):
If mode is omitted, it defaults to 'r'. The default is to use text mode, which may convert
'\n'
characters to a platform-specific representation on writing and back on reading. Thus, when opening a binary file, you should append'b'
to the mode value to open the file in binary mode, which will improve portability.
以二进制模式打开文件。
f = open("output", "wb")