考虑一个包含以字节表示的二进制数据的文件:
with open('foo', 'rb') as f:
bs = f.read()
print(bs)
# b'\x00\x01\x00\x01\x00\x01'...
字节只能有0
或1
值。
获取一组32位/字节并将它们解析为(32位)整数的最高性能是什么? struct
模块可能就是我需要的,但我找不到立即的方法来做到这一点。
替代方法,包括将字节转换为字符,然后从比特字符串解析整数,例如对于我的用例,int('01010101...', 2)
执行速度不如我所需要的那么快。
答案 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