求助:python如何按位解析二进制数据?

gravelandblood 2012-12-25 04:05:04
根据刚刚查阅的资料,struct模块貌似只能按最小一个byte来拆分二进制数据
如果我想按任意bit来拆分,该如何做?
比如在C++中,有

union GraphicsHeader
{
struct
{
UINT16 min_graph_rec_size : 12;
UINT16 : 1;
UINT16 extend_flag : 1;
UINT16 time_info_flag : 1;
UINT16 delete_flag : 1;
};
UINT16 value;
};

给其中的value负值二进制数,则可以很方便地提取相应各个变量
python该如何做到呢?
望大哥们多多指教
...全文
1156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel_su 2012-12-27
  • 打赏
  • 举报
回复
懒得自己写代码,可以找找第三方模块,应该有的吧...
ChongQingJin28 2012-12-26
  • 打赏
  • 举报
回复
汇编语言中的inc可以让一个内存单元加1.
C语言中的++可以让一个变量的值加1
python没有+1的操作

汇编语言中有对于bit的操作
C语言中可以调用汇编实现bit操作
python能调用C实现bit的操作。

python中为什么没有+1呢?这么简单的功能为什么不实现呢?
我想是因为python要操作的不是简单的int,他想要的是更高级的数据。
比如说99个bit的int,3/7 + 5/9 = 62/63等
(32 bit 的int 能够解决多少现实世界中的问题呢)
python中所有的东西都是C中的struct,对一个struct 加1有意义吗?
所以python中没有+1吧(只是我个人的认为,与python无关)

如果你经常要用的是与cpu有关的操作,那用python并不合适!
但是这个世界上有几个linux内核呢?(我只知道一个)
xlfm_cadn 2012-12-26
  • 打赏
  • 举报
回复
补充几点: 首先,我觉得例子中使用的bit域,在python中木有对应的语法结构 第二,python中对于位移和按位与或的操作只适用于int对象,所以再处理的时候需要判断类型 第三,我觉得处理起来不是很麻烦啊。 data_field=(data&mask)>>bits 不会占用太多行哈。。
ImN1 2012-12-25
  • 打赏
  • 举报
回复
引用 5 楼 gravelandblood 的回复:
引用 4 楼 xlfm_cadn 的回复:我是使用位移(<< >>) 和按位与/或 ,跟c一样 如果真的是这样的话,我得放弃用python做这些事了...
这样说也可以,本来做内核的事就不该用脚本 脚本适合随意改动的编程方式,像我这样,用的时候改几行就能解决一个问题,懒得编译的人 按位计算还是C合适
gravelandblood 2012-12-25
  • 打赏
  • 举报
回复
引用 4 楼 xlfm_cadn 的回复:
我是使用位移(<< >>) 和按位与/或 ,跟c一样
如果真的是这样的话,我得放弃用python做这些事了...
xlfm_cadn 2012-12-25
  • 打赏
  • 举报
回复
我是使用位移(<< >>) 和按位与/或 ,跟c一样
ImN1 2012-12-25
  • 打赏
  • 举报
回复
呃,刚看到这个模块,还没细看,说不上具体语法 这样说吧,一个字节8位(bit),把数据转2进制就是bit了
gravelandblood 2012-12-25
  • 打赏
  • 举报
回复
不太明白,这位大哥说的应该还是按字节读啊 我想知道的是取出字节之后,如何快捷地按任意bit拆分 比如读出来一个0x1234, 将它按bit分成五段:[12:1:1:1:1] 值分别为:0x123,0,1,0,0 不过还是谢谢了...
ImN1 2012-12-25
  • 打赏
  • 举报
回复
open 用"b" 模式就是字节读取 seek() 字符串用encode(自身编码) 就转成byte type 上述基于py 3.3

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧