从Python中的文件中读取“二进制”字节

时间:2017-11-02 19:12:25

标签: python python-3.x bit-manipulation byte

考虑一个包含以字节表示的二进制数据的文件:

with open('foo', 'rb') as f:
    bs = f.read()
    print(bs)
    # b'\x00\x01\x00\x01\x00\x01'...

字节只能有01值。

获取一组32位/字节并将它们解析为(32位)整数的最高性能是什么? struct模块可能就是我需要的,但我找不到立即的方法来做到这一点。

替代方法,包括将字节转换为字符,然后从比特字符串解析整数,例如对于我的用例,int('01010101...', 2)执行速度不如我所需要的那么快。

1 个答案:

答案 0 :(得分:2)

解决方法解决方案

考虑测试号101010...

b = b'\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00'
print(0b10101010101010101010101010101010)
# 2863311530

将字节映射到字符串,然后解析int:

s = ''.join(map(lambda x: chr(x+48), b))
i = int(s, 2)
print(i)
# 2863311530

迭代字节并使用bitshifts构建整数:

idx = 0
tmp = 0
for bit in b:
    tmp <<= 1
    tmp |= bit
    idx += 1
    if idx == 32:
        print(tmp)
        idx = 0
        tmp = 0
# 2863311530