我有一个关于网络编程消息框架的简短问题:
您经常会看到定义 MAGIC 标志和相应位掩码以检索它的实现。
标头可能包含其他消息相关信息,用逻辑或翻转位。
各种实现使用 (header & MASK) == MAGIC 检查魔术标志。
分离这些担忧有什么好处?
你也可以这样做:(header & MAGIC) == MAGIC。
简单的例子:
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 没有区别。