【问题标题】:Whats a simple way to turn bytes into a binary string? [duplicate]将字节转换为二进制字符串的简单方法是什么? [复制]
【发布时间】:2020-03-06 23:57:43
【问题描述】:

我需要将文件中的字节转换为 1 和 0 的字符串,

file = open("Some_File.jpg","rb")
data = file.read()
file.close()
binary = some_function(data)
print(binary)
>>> 0100101000010101001...

我已经设法通过首先将字节转换为 Base64 来获得等效的东西,但这会使字符串的大小非常长。我看过的其他问题是关于将二进制字符串转换为 字节,但我找不到任何相反的。

这个问题被标记为另一个问题的重复,但是这个问题正在将 字符串 转换为二进制。如果我想这样做,我会把它转换成 Base64,但是它太长了。我需要一种将“字节”直接转换为 1 和 0 字符串的方法

【问题讨论】:

  • “让它太长”是什么意思?您是否担心执行此操作所需的时间,或生成的二进制字符串的字面长度?无论您如何转换为二进制文件,后者的定义都是相同的(8 * number_of_bytes 字符)。
  • "但是这使得字符串的大小很长" 你期望结果是多长时间,为什么?为什么你认为“直接转换字节”会比转换“字符串”产生更短的结果?为什么您期望 base64 在这里会有所帮助?
  • @Aleon 两者,真的,因为我正在测试它的文件大约是 4KB,文件的结果是 49KB,大约需要一秒钟才能通过它
  • @Karl Knechtel 我使用 Base64 将字节转换为某种字符串,然后将该字符串转换为二进制
  • 我正在使用它在我正在创建的算法中生成的二进制字符串,该算法将二进制数据转换为一种“Base 3.5”格式,占用正常字符串 1 的一半空间和 0 的

标签: python python-3.x binary byte


【解决方案1】:

根据 cmets 中的讨论,我不相信您所问的是您实际上想要做什么。但是,假设您要将 python 字节串转换为文字零和一的字符串,这是一种方法:

import itertools

def bytes_to_bits(bytes_to_print: bytes):
    bits = [
        ["1" if byte & 2 ** i else "0" for i in range(7, -1, -1)]
        for byte in bytes_to_print
    ]
    return ''.join(itertools.chain.from_iterable(bits))


if __name__ == "__main__":
    print(bytes_to_bits(b"ABC"))

【讨论】:

  • 这正是我所需要的,如果你不介意的话,你能告诉我我应该如何措辞,如果这是我想要的。
  • 好的,还有……这段代码的结果与您实际尝试的代码的结果有何不同?
  • 二进制字符串更短!
  • @Pomegranates-And-Python 很难告诉你,这个问题一般表明某处存在误解。例如,您提到 Base64 让我认为您并不完全熟悉计算机如何处理数据。您的 Base64 字符串更长,因为 Base64 在每个字节上“浪费”位,只是为了让给定的字节可以用可打印的字符表示。
  • 我知道计算机是如何处理数据的,我只是不这么看python,我只是想:'嘿,我需要把'x'变成'y',这是什么函数。 ..?哦! Base64把'bytes'变成一串字母,然后我把它变成二进制!'
猜你喜欢
  • 2012-12-30
  • 2012-08-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 2013-07-01
  • 2021-12-20
  • 2013-07-17
  • 2019-03-14
相关资源
最近更新 更多