1

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

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

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

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

分离这些担忧有什么好处?

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

4

1 回答 1

2

简单的例子:

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

然后(header & MASK) == MAGIC检查 MASK 中设置的所有位(这里是低 4 位)是否与MAGIC 中的相应位具有相同的值。对于示例标题,情况并非如此。

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

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

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

于 2013-08-02T21:25:51.127 回答