位掩码到数组索引

时间:2009-03-30 12:15:20

标签: c++ indexing bitmask

有没有一种简单的方法可以将位掩码转换为数组索引?

即。如果我有一个枚举

a = 0x01,
b = 0x02,
c = 0x04,
d = 0x08,
e = 0x10, 
etc

我希望将相关数据存储在数组中,是否有一种简单的方法可以将a转换为0,b转换为1,c转换为2.等等?

非常感谢

5 个答案:

答案 0 :(得分:6)

r =   ln base 2 
and programmatically,

unsigned int v=yourEnumValue;
unsigned r = 0; 
while (v >>= 1) 
{
   r++;
}

r is your answer

答案 1 :(得分:4)

我不确定这是不是你要问的,但你为什么不拿2基日志呢?

答案 2 :(得分:3)

记录 2 n?

答案 3 :(得分:1)

我不知道你要求的简单解决方案,但为什么不使用地图而不是数组呢?

应该没有任何魔法转换。

答案 4 :(得分:1)

使用std :: map:

#include <map>

std::map <my_enum, my_datatype> m;
m[ a ] = whatever;