如何解释MCOIMAPMessage上的typedef enum属性

如何解释MCOIMAPMessage上的typedef enum属性,c,typedef,mailcore2,C,Typedef,Mailcore2,我的问题主要是关于如何解释typedef枚举,但以下是背景: 我使用的是MailCore2,我试图找出如何读取我正在获取的单个电子邮件对象的标志 我获取的每个MCOIMAPMessage*电子邮件都有一个名为“flags”的属性。flags的类型为MCOMessageFlag。当我查找MCOMessageFlag的定义时,我发现它是一个typedef枚举: typedef enum { MCOMessageFlagNone = 0, /** Seen/Read

我的问题主要是关于如何解释typedef枚举,但以下是背景:

我使用的是MailCore2,我试图找出如何读取我正在获取的单个电子邮件对象的标志

我获取的每个MCOIMAPMessage*电子邮件都有一个名为“flags”的属性。flags的类型为MCOMessageFlag。当我查找MCOMessageFlag的定义时,我发现它是一个typedef枚举:

typedef enum {
    MCOMessageFlagNone          = 0,
    /** Seen/Read flag.*/
    MCOMessageFlagSeen          = 1 << 0,
    /** Replied/Answered flag.*/
   MCOMessageFlagAnswered      = 1 << 1,
    /** Flagged/Starred flag.*/
    MCOMessageFlagFlagged       = 1 << 2,
    /** Deleted flag.*/
    MCOMessageFlagDeleted       = 1 << 3,
    /** Draft flag.*/
    MCOMessageFlagDraft         = 1 << 4,
    /** $MDNSent flag.*/
    MCOMessageFlagMDNSent       = 1 << 5,
    /** $Forwarded flag.*/
    MCOMessageFlagForwarded     = 1 << 6,
    /** $SubmitPending flag.*/
    MCOMessageFlagSubmitPending = 1 << 7,
    /** $Submitted flag.*/
    MCOMessageFlagSubmitted     = 1 << 8,
} MCOMessageFlag;

当然,这不起作用,但这是一个想法。有人能建议我如何完成这项工作和/或如何理解typedef枚举吗?

枚举的值表示各个位,因此您需要逐位操作来检查标志:

BOOL wasSeen = ( email.flags & MCOMessageFlagSeen ); // check if a bit was set

枚举的值表示单个位,因此您需要按位操作来检查标志:

BOOL wasSeen = ( email.flags & MCOMessageFlagSeen ); // check if a bit was set

枚举的值表示单个位,因此您需要按位操作来检查标志:

BOOL wasSeen = ( email.flags & MCOMessageFlagSeen ); // check if a bit was set

枚举的值表示单个位,因此您需要按位操作来检查标志:

BOOL wasSeen = ( email.flags & MCOMessageFlagSeen ); // check if a bit was set

这些标记用于标记中

这允许在一个数字类型中存储多个开/关标志(允许它是
无符号字符
无符号整数
)。基本上,如果设置了一个标志,那么也会设置相应的位

例如:

MCOMessageFlagMDNSent       = 1 << 5
如果按位AND结果不同于零,则结果将为
true
,仅当设置了相应的位时才会发生这种情况

您可以使用或轻松设置标志:

flags |= MCOMessageFlagMDNSent;
或使用和重置它:

flags &= ~MCOMessageFlagMDNSent;

这些标志在中使用

这允许在一个数字类型中存储多个开/关标志(允许它是
无符号字符
无符号整数
)。基本上,如果设置了一个标志,那么也会设置相应的位

例如:

MCOMessageFlagMDNSent       = 1 << 5
如果按位AND结果不同于零,则结果将为
true
,仅当设置了相应的位时才会发生这种情况

您可以使用或轻松设置标志:

flags |= MCOMessageFlagMDNSent;
或使用和重置它:

flags &= ~MCOMessageFlagMDNSent;

这些标志在中使用

这允许在一个数字类型中存储多个开/关标志(允许它是
无符号字符
无符号整数
)。基本上,如果设置了一个标志,那么也会设置相应的位

例如:

MCOMessageFlagMDNSent       = 1 << 5
如果按位AND结果不同于零,则结果将为
true
,仅当设置了相应的位时才会发生这种情况

您可以使用或轻松设置标志:

flags |= MCOMessageFlagMDNSent;
或使用和重置它:

flags &= ~MCOMessageFlagMDNSent;

这些标志在中使用

这允许在一个数字类型中存储多个开/关标志(允许它是
无符号字符
无符号整数
)。基本上,如果设置了一个标志,那么也会设置相应的位

例如:

MCOMessageFlagMDNSent       = 1 << 5
如果按位AND结果不同于零,则结果将为
true
,仅当设置了相应的位时才会发生这种情况

您可以使用或轻松设置标志:

flags |= MCOMessageFlagMDNSent;
或使用和重置它:

flags &= ~MCOMessageFlagMDNSent;

谢谢,那非常有帮助。谢谢,那非常有帮助。谢谢,那非常有帮助。谢谢,那非常有帮助。