pea*_*lco 4 c python struct unions
我试图弄清楚一些C代码,以便我可以将它移植到python中.该代码用于读取专有的二进制数据文件格式.到目前为止它一直很简单 - 它主要是结构,我一直在使用struct库来从文件中请求特定的ctypes.但是,我刚刚提到了这段代码,我对如何在python中实现它感到茫然.特别是,我不知道如何处理enum或者union.
#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;
Run Code Online (Sandbox Code Playgroud)
其次,在下面的struct定义中,我不确定变量名后面的冒号是什么意思,(例如KeyPad:4).这是否意味着我应该读4个字节?
typedef struct
{
UWORD StimType;
UBYTE KeyBoard;
UBYTE KeyPad:4;
UBYTE Accept:4;
long Offset;
} EVENT1;
Run Code Online (Sandbox Code Playgroud)
如果它有用,我在python中访问文件的方式的抽象示例如下:
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')
小智 8
枚举:该语言中没有枚举.已经提出了各种习语,但没有一种真正普遍存在.最直接的(在这种情况下是足够的)解决方案是
TEEG_EVENT_TAB1 = 1
TEEG_EVENT_TAB2 = 2
Run Code Online (Sandbox Code Playgroud)
该fieldname : n语法被称为位域和,是啊,确实意味着"这是N位大".ctypes再次拥有它们.
| 归档时间: |
|
| 查看次数: |
5655 次 |
| 最近记录: |