如何从一个or标志中检索回值

how to retrieve back values from an ORed flag

本文关键字:标志 or 检索 一个      更新时间:2023-10-16

假设我正在处理CreateFileA

Public Const GENERIC_ALL As Int32 = &H10000000
Public Const GENERIC_READ As Int32 = &H80000000
Public Const GENERIC_WRITE As Int32 = &H40000000
Public Const GENERIC_EXECUTE As Int32 = &H20000000

因此它意味着如果我需要读写,我将执行

GENERIC_READ | GENERIC_WRITE = 0C0000000h

API如何反转OR操作来知道它包含什么标志?换句话说,假设我得到了值"0C0000000h",我需要知道它包含什么访问,我应该对这个数字做什么操作?

我的观点是,如果我有大约100个标志,我对它们进行or/and,然后最终会得到一些复杂的数字,我如何才能检索用于组成该数字的标志?

二进制与运算可用于测试单个位(即标志)。

例如

bool b = (value & GENERIC_READ) != 0;
如果先前将GENERIC_READ放入值中,则

的计算结果为true,而不管组合了什么其他标志。

如果这还不能很好地解释它,那么http://en.wikipedia.org/wiki/Bitwise_operation#AND可能会有所帮助。