网络编程/消息框架

时间:2013-08-02 21:16:22

标签: c sockets flags

我有一个关于网络编程的消息框架的简短问题:

您经常会看到定义MAGIC标志的实现和相应的位掩码来检索它。

标题可能包含其他消息相关信息,使用逻辑OR翻转位。

各种实现使用(header& MASK)== MAGIC检查魔术标志。

分离这些问题有什么好处?

你也可以这样做:(header& MAGIC)== MAGIC。

1 个答案:

答案 0 :(得分:2)

简单示例:

MASK   = 0x000F
MAGIC  = 0x0001
header = 0x0005

然后(header & MASK) == MAGIC检查在MASK中设置的所有位(此处是低4位)是否具有与MAGIC中相应位相同的值。这是不正确 示例标题。

另一方面,(header & MAGIC) == MAGIC仅检查MAGIC中设置的所有位是否也在标题中设置,在此示例中为真

在您的示例中,header = 0xFFFF会通过测试(header & MAGIC) == MAGIC, 但不是测试(header & MASK) == MAGIC

当然,如果MASK == MAGIC,则没有区别。