【问题标题】:Convert Binary file to strings of 0s and 1s将二进制文件转换为 0 和 1 的字符串
【发布时间】:2021-09-20 05:11:08
【问题描述】:

我有一个来自随机数生成器的二进制.dat 文件,我需要将其转换为0s 和1s 的字符串。我在 python 中找不到一个优雅的解决方案。

我现在拥有的代码。需要将quantis.dat转换为0s和1s的字符串。

def bytesToBits(bytes):
  return bin(int(bytes.hex(), 16))

outfile = open("quantum.txt", "w")
infile = open("quantis.dat", "rb")
chunk = infile.read(1)
  
while chunk:
    decimal = bytesToBits(chunk) 
    outfile.write(decimal) 
    chunk = infile.read(1)

outfile.close()

【问题讨论】:

  • 您的代码会产生任何错误吗?哪一个?或者生成什么输出?
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: python-3.x file binaryfiles


【解决方案1】:

您可以将其用于字符串列表:

>>> [f"{n:08b}" for n in open("random.dat", "rb").read()]
['01000001', '01100010', '01000010', '10011011', '01100111', ...

或者如果你想要一个字符串:

>>> "".join(f"{n:08b}" for n in open("random.dat", "rb").read())
'010000010110001001000010100110110110011100010110101101010111011...

:08b 格式说明符会将每个字节格式化为二进制,正好有 8 位。

【讨论】:

  • 我想要一串位并将其保存到 .txt 文件中。但是我无法打开使用您的代码生成的 .txt 文档。 .dat 文件大约 30 mb,但生成的 .txt 文件大约 250 mb。
  • 是的,它将是二进制文件大小的 8 倍,因为现在每个字节有 8 个字符。这是意料之中的。
  • 用什么阅读?您当然可以使用 Python 读取文件。如果您尝试在文本编辑器中打开 .txt 文件,根据您使用的软件可能会失败,但是在文本编辑器中打开一个 250MB 的文本文件后您打算做什么?
猜你喜欢
  • 2017-07-12
  • 1970-01-01
  • 2016-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多