我试图找出一些 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;
其次,在下面的结构定义中,我不确定变量名后面的冒号是什么意思,(例如,KeyPad:4)。这是否意味着我应该读取 4 个字节?
typedef struct
{
UWORD StimType;
UBYTE KeyBoard;
UBYTE KeyPad:4;
UBYTE Accept:4;
long Offset;
} EVENT1;
如果它有用,我在 python 中访问文件的方式的抽象示例如下:
从结构导入解包,计算大小
def get(ctype, size=1):
"""读取二进制数据并将其解压缩为所需的 ctype。"""
如果大小 == 1:
大小 = ''
别的:
大小 = str(大小)
chunk = file.read(calcsize(size + ctype))
返回解包(大小 + ctype,块)[0]
文件 = 打开(“文件.bin”,“rb”)
文件.seek(1234)
var1 = get('i')
var2 = get('4l')
var3 = get('10s')