有没有一种简单的方法可以读入这些整数?我更喜欢内置方法,但我认为可以进行一些位操作。
干杯
编辑
我想到了另一种与下面的方法不同的方法,我认为它更清楚。它在另一端用零填充,然后移动结果。如果需要,则否,因为移位会填充最初的 msb。
struct.unpack('<i','\0'+ bytes)[0] >> 8
最佳答案
Python 的 struct
模块允许您将字节解释为不同类型的数据结构,并控制字节顺序。
如果你从文件中读取一个三字节数字,你可以这样转换它:
struct.unpack('<I', bytes + '\0')
模块似乎不支持 24 位字,因此 '\0'
-padding。
编辑:带符号的数字比较棘手。您可以复制高位,并将高位设置为零,因为它移动到 4 个字节的最高位置(最后的 \xff
有它)。:
struct.unpack('<i', bytes + ('\0' if bytes[2] < '\x80' else '\xff'))
或者,对于 python3(bytes
是保留字,检查字节数组的一个字节会得到一个 int
):
struct.unpack('<i', chunk + ('\0' if chunk[2] < 128 else '\xff'))
关于python - 如何使用 Python 从 24 位和小端字节序的文件中读取整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3783677/