我试图找出一些 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')