Python.. 将二进制/十六进制文件转换成文本文件

4
我想在Python中将一个bin文件转换为txt文件。
with open("atb.bin", "rb") as file:

     data = file.read(8)

datastring = str(data)

print(datastring)
print(' '.join(str(ord(c)) for c in datastring))

我得到的输出是:
b'\x14\x12\x1c\x1a#\x00-d'
98 39 92 120 49 52 92 120 49 50 92 120 49 99 92 120 49 97 35 92 120 48 48 45 100 39

现在,我该如何将其转换为十进制并存储在txt文件中?

1
不要将你的字节对象转换为字符串... Python 2 还是 Python 3? - Jean-François Fabre
这是Python 3。你能否提供一个解决方案? - Aj Mv
可能是使用Python读取二进制文件的重复问题。 - majin
2个回答

3
你的主要错误是做了以下事情:
datastring = str(data)

因为它将 data 对象的表示形式转换为带有前缀b和引号的字符串,并进行转义...这是错误的

像你正在做的那样读取文件:

with open("atb.bin", "rb") as file:
     data = file.read(8)

现在data是一个bytes对象,在Python 3中不需要使用ord,因为值已经是整数。现在打开一个文本文件并转储这些值(将整数转换为字符串、十进制):

with open("out.txt", "w") as f:
   f.write(" ".join(map(str,data))):
   f.write("\n")

在Python 2中,您需要获取字符代码然后转换为字符串:
   f.write(" ".join([str(ord(c)) for c in data]))

0

你的Python将文件中8个字符的文本表示形式转换为文本。

因此,不是

print(' '.join(str(ord(c)) for c in datastring))

你应该放置

print(' '.join(str(ord(c)) for c in data))

然后您可以使用标准技术将其写入文件。

例如: (Python 2)

>>> data=b'\x14\x12\x1c\x1a#\x00-d'
>>> print(' '.join(str(ord(c)) for c in data))
20 18 28 26 35 0 45 100

(Python 3)

>>> data=b'\x14\x12\x1c\x1a#\x00-d'
>>> print(' '.join(str(c) for c in data))
20 18 28 26 35 0 45 100

在这种情况下,我们可以使用struct.unpack()吗?在哪些场景下unpack是有用的? - Aj Mv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接