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