-2

我正在编写一个 python 脚本,它将每行包含一对数字的 ascii 文件转换为直接的二进制表示。这是我的脚本:

in_file = open("p02_0609.bin", 'r')
out_file = open("sta013.bin", 'w')
out_data = bytearray()

for line in in_file:
    addr, i2c_data = [int(x) for x in line.split(" ")]
    out_data.append(addr)
    out_data.append(i2c_data)

out_file.write(out_data)
out_file.close()
in_file.close()

以及它正在读取的文件样本(总共约 2000 行)

58 1
42 4
40 0
41 0
32 0
33 0
34 0
35 0
36 0
37 0
38 0
39 0
40 1
40 2
33 143
40 3
33 0
40 4
40 5
40 6
40 7
40 8
40 9
40 10
40 11

输出文件以奇数字节结束,因为所有数据都是成对的,所以不应该这样结束,并且比预期的长约 80 个字节。在用十六进制编辑器四处寻找之后,我终于找到了罪魁祸首。“10”(Ascii LF)的每个实例都在其前面附加了一个 CR。我如何让它停止这样做?

Tl; dr:Python 是个笨蛋,在二进制数据中将 CR 添加到 LF 中,这是没有意义的。怎么修?

4

1 回答 1

0

您正在处理文本文件,因此 open 函数会自动添加行尾。您需要在 open 中使用模式 'wb' 来读取和写入字节。

于 2017-03-12T22:56:17.010 回答