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

max*_*mus 4 python binary file-io 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'
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

650*_*502 6

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

bytetable = [("00000000"+bin(x)[2:])[-8:] for x in range(256)]
Run Code Online (Sandbox Code Playgroud)

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

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

那么二进制的整个文件都可以用

binrep = "".join(bytetable[x] for x in open("file", "rb").read())
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案,但有些评论:1.Python 3没有`xrange()`(这是一个Python 3的问题).你按照某种"大端"顺序排列这些位,这对我来说非常不自然.至少应该指出.3.拥有一个与内置类(`bytes`)同名的变量通常被认为是错误的. (2认同)