微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Python解压/打包二进制数据中的任意位深度整数

如何解决使用Python解压/打包二进制数据中的任意位深度整数

我想将两个13位无符号整数包装在用零填充的32位二进制结构中,然后将其保存到二进制文件中(出于这个问题,每个整数可以具有任意不同的位深度)。 / p>

我可以做到这一点:

foo = 1
bar = 8191
baz = (foo & 0x1FFF) | (bar & 0x1FFF) << 13
with open('data32.bin','bw') as f:
    f.write(baz.to_bytes(4,byteorder='big'))

但是我正在寻找一种更好的,也许更Python化的方式。如果它允许使用一种定义格式的方式(例如,我可以使用相同的定义将二进制数据读回变量),则是一个加分。

我尝试过:

  • 一个非常方便的软件包,名为bitstruct。它以一种不错的方式实现了我想要的功能,但是它在某些主要的python3程序包管理器(特别是conda)中似乎不可用,这会很好。
  • struct(带包装)。但看起来它仅适用于C类型,而不适用于任意位深度(如我的示例)。
  • 字节数组,位数组。看起来他们可以胜任这项工作,但看起来却有些过头,当我开始用它们编写代码时,实际上比我的例子还要难看。

您碰巧还有其他建议吗? 谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?