python - 如何使用 Python 从 24 位和小端字节序的文件中读取整数?

标签 python file-io endianness

有没有一种简单的方法可以读入这些整数?我更喜欢内置方法,但我认为可以进行一些位操作。
干杯

编辑
我想到了另一种与下面的方法不同的方法,我认为它更清楚。它在另一端用零填充,然后移动结果。如果需要,则否,因为移位会填充最初的 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/

上一篇:Java:自动内存

下一篇:Python 双重迭代

相关文章:

python - 在 Flask 的 WTforms 中创建动态字段

python - 使用基本的 python 计算器,但无法让我的菜单正确循环

python - python中的numpy迭代没有FOR循环

jQuery 1.9 不会在旧版 Firefox 中冒泡文件选择/更改事件

python - 为什么我的字符串中出现不需要的换行符?

c - fread() 没有按预期工作

c# - 单字节顺序

python - 如何在 Kotlin 中获取 Python 的切片运算符

c++ - C++中将stdin的内容读入字符串或 vector 的最快方法

c++ - 为什么这个 C++ 代码不能编译?