将十六进制字符串写入二进制文件

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")