1

我正在尝试使用 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 读取这些生成的文件,但我得到的字节仍然比预期的要多。

4

1 回答 1

2

您正在以文本模式打开文件以进行写入,因此换行符被转换为使用系统约定。在 Windows 的情况下0Aor'\n'被转换为0D 0Aor '\r\n'

来自python 的 open() 文档(添加了重点):

如果省略mode,则默认为 'r'。默认是使用文本模式,它可以'\n'在写入时将字符转换为特定于平台的表示,然后在读取时返回。因此,在打开二进制文件时,应附加'b'模式值以二进制模式打开文件,这将提高可移植性。

以二进制模式打开文件。

f = open("output", "wb")
于 2021-08-27T13:59:01.680 回答