gpt4 book ai didi

python - 在 python 中实现 C 的枚举和 union

转载 作者:太空狗 更新时间:2023-10-30 02:00:24 24 4
gpt4 key购买 nike

我正在尝试找出一些 C 代码,以便将其移植到 Python 中。该代码用于读取专有的二进制数据文件格式。到目前为止一直很简单——主要是结构,我一直在使用 struct 库从文件中请求特定的 ctypes。但是,我刚刚想到了这段代码,但我不知道如何在 python 中实现它。特别是,我不确定如何处理 enumunion

#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 中访问文件的方式的抽象示例如下:

from struct import unpack, calcsizedef 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')

最佳答案

枚举:语言中没有枚举。已经提出了各种习语,但没有一个真正广泛使用。最直接的(在这种情况下也是足够的)解决方案是

TEEG_EVENT_TAB1 = 1
TEEG_EVENT_TAB2 = 2

union :ctypesunions .

fieldname : n 语法称为位域,是的,意思是“这是 n 位大”。同样,ctypes 有 them .

关于python - 在 python 中实现 C 的枚举和 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com