python中的逐位操作



我目前正在用python编写一个程序,该程序使用霍夫曼编码压缩文件。因为python,我一直在尝试在如此低的级别上编程时遇到问题。我无法解决的一个问题是解码(我将正在读取的文件编码在.bin文件中(,因为到目前为止,我发现的所有内容都是逐字节或十六进制读取二进制文件,所以我无法实现解压缩。

所以我的问题是,我可以一点一点地读取python中的二进制文件吗,比如有一个变量:binary_text='0b1000101000…'

您也可以使用bitstream库。它允许将字节表示为二进制流:

>>> from bitstream import BitStream
>>> BitStream(b"Hello World!")
010010000110010101101100011011000110111100100000010101110110111101110010011011000110010000100001

您可以通过readwrite功能读取和写入位,如:


>>> stream = BitStream()        # <empty>
>>> stream.write(True, bool)    # 1
>>> stream.write(False, bool)   # 10
>>> stream.read(bool, 2)        # <empty>
[True, False]

您可以在这里找到文档和更多示例。

更新:

另一个很好的替代方案是比特数组库,它用C语言实现,并提供了丰富的操作比特流的功能。

您应该能够以rb(读取二进制(模式打开文件,然后在文件句柄上使用.read。以下是python的read的相关文档:https://docs.python.org/3/library/functions.html#open

with open('my_file.txt', 'rb') as f:
eight_bytes = f.read(8)
>>> print(eight_bytes)
b'hello wo'
>>> eight_bytes[0]
104

不知道为什么"0b"会有用,但无论如何:

import numpy as np
bin = np.fromfile("file.bin", 'u1')
binary_text = "0b"
for byte in bin:
for mask in [128, 64, 32, 16, 8, 4, 2, 1]:
binary_text += '1' if byte & mask else '0'
print(binary_text)

相关内容

  • 没有找到相关文章

最新更新