python - 在 Python 中获取文件的原始二进制表示

标签 python file-io binary python-3.x

我想使用 Python 3 将文件中的位的确切序列转换为字符串。关于这个主题有几个问题很接近,但没有完全回答。到目前为止,我有这个:

>>> data = open('file.bin', 'rb').read()
>>> data
'\xa1\xa7\xda4\x86G\xa0!e\xab7M\xce\xd4\xf9\x0e\x99\xce\xe94Y3\x1d\xb7\xa3d\xf9\x92\xd9\xa8\xca\x05\x0f$\xb3\xcd*\xbfT\xbb\x8d\x801\xfanX\x1e\xb4^\xa7l\xe3=\xaf\x89\x86\xaf\x0e8\xeeL\xcd|*5\xf16\xe4\xf6a\xf5\xc4\xf5\xb0\xfc;\xf3\xb5\xb3/\x9a5\xee+\xc5^\xf5\xfe\xaf]\xf7.X\x81\xf3\x14\xe9\x9fK\xf6d\xefK\x8e\xff\x00\x9a>\xe7\xea\xc8\x1b\xc1\x8c\xff\x00D>\xb8\xff\x00\x9c9...'

>>> bin(data[:][0])
'0b11111111'

好的,我可以得到一个以 2 为基数的数字,但我不明白为什么 data[:][x],而且我仍然有前导 0b。似乎我必须遍历整个字符串并进行一些强制转换和解析以获得正确的输出。有没有更简单的方法来获取 01 的序列而无需循环、解析和连接字符串?

提前致谢!

最佳答案

我会首先预先计算所有值 0..255 的字符串表示

bytetable = [("00000000"+bin(x)[2:])[-8:] for x in range(256)]

或者,如果您更喜欢 LSB 而非 MSB 顺序的位

bytetable = [("00000000"+bin(x)[2:])[-1:-9:-1] for x in range(256)]

然后可以得到整个二进制文件

binrep = "".join(bytetable[x] for x in open("file", "rb").read())

关于python - 在 Python 中获取文件的原始二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775146/

相关文章:

python - 端点 URL : https://sns. us-west-1.amazonaws.com 上的连接超时

python - 如何解码这个小端(int32)消息?

无法打开使用 O_CREAT 创建的文件

c - 函数/结构/指针中的段错误

algorithm - 计算二进制数的底数对数

python - 从 Python 异步中断

java - 文件 IO 期间出现 NullPointerException

c++ - 快速将 uint32_t 转换为二进制

Java 库哪些不是二进制文件?

python - 使用 python 请求的多部分 POST