Python中文
首页
教程
问答
标签
搜索
登录
注册
用python实现C的枚举与联合
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我试图找出一些C代码,以便将其移植到python中。该代码用于读取专有的二进制数据文件格式。到目前为止,它很简单——主要是结构,我一直在使用<code>struct</code>库从文件中请求特定的ctype。然而,我刚刚想到了这段代码,对于如何在python中实现它,我不知所措。尤其是,我不知道如何处理<code>enum</code>或<code>union</code>。</p> <pre><code>#define BYTE char #define UBYTE unsigned char #define WORD short #define UWORD unsigned short typedef enum { TEEG_EVENT_TAB1=1, TEEG_EVENT_TAB2=2 } TEEG_TYPE; typedef struct { TEEG_TYPE Teeg; long Size; union { void *Ptr; // Memory pointer long Offset }; } TEEG; </code></pre> <p>其次,在下面的结构定义中,我不确定变量名后面的冒号是什么意思(例如,<code>KeyPad:4</code>)。是不是说我应该读4个字节?</p> <pre><code>typedef struct { UWORD StimType; UBYTE <a href="https://www.cnpython.com/pypi/keyboard" class="inner-link">keyboard</a>; UBYTE KeyPad:4; UBYTE Accept:4; long Offset; } EVENT1; </code></pre> <p>如果有用的话,我用python访问文件的抽象示例如下:</p> <pre> from struct import unpack, calcsize def get(ctype, size=1): """Reads and unpacks binary data into the desired ctype.""" if size == 1: size = '' else: size = str(size) chunk = file.read(calcsize(size + ctype)) return unpack(size + ctype, chunk)[0] file = open("file.bin", "rb") file.seek(1234) var1 = get('i') var2 = get('4l') var3 = get('10s') </pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我不知道您所有问题的答案,但是对于不需要按值查找的枚举(即,只是使用它来避免幻数),我喜欢使用一个小类。常规的dict是另一个工作正常的选项。如果需要按值查找,则可能需要其他结构。</p> <pre><code>class TeegType(object): TEEG_EVENT_TAB1 = 1 TEEG_EVENT_TAB2 = 2 print TeegType.TEEG_EVENT_TAB1 </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何更改QTextEdit小部件的颜色
1 回答
如何更改Qthread内Qtimer的间隔?
2 回答
如何更改QTreeView中特定分支的颜色?
5 回答
如何更改QTreeView标题(也称为QHeaderView)的背景色?
4 回答
如何更改QTreeWidget项的父项
2 回答
如何更改QWidget(QTextEdit)在场景中的位置(PyQt)
7 回答
如何更改random.randint的变量?
8 回答
如何更改Raspberry Pi中的默认python版本
3 回答
如何更改readline路径?
4 回答
如何更改recycleview中所选项目的背景色。我还希望它自动选择第一个项目(白色背景)
2 回答
如何更改regplot()的点大小,seaborn的散点图函数(python)
3 回答
如何更改relplot中置信区间的透明度?
3 回答
如何更改reportlab画布对象的文件名?
6 回答
如何更改RequestsOAuthlib中的时间戳和nonce?
9 回答
如何更改Resnet上的频道数,使其仅在黑白图像上工作?
10 回答
如何更改RetrieveUpdatedStroyaPivi中序列化数据的值
3 回答
如何更改RGB图像中区域的不透明度(numpy,cv2)
8 回答
如何更改robot日志/报告文件的名称和文件夹?
9 回答
如何更改RotatingFileHandler在Python中命名文件的方式?
8 回答
如何更改RS4类属性rpy2的默认值
6 回答