3

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

IE。如果我有一个枚举

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

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

非常感谢

4

5 回答 5

6
r =   ln base 2 
and programmatically,

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

r is your answer
于 2009-03-30T12:19:41.910 回答
4

我不确定这是否是你要问的,但你为什么不只取一个 2-base log 呢?

于 2009-03-30T12:19:06.280 回答
3

记录2 n?

于 2009-03-30T12:18:50.230 回答
2

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

应该在没有任何魔法转换的情况下工作。

于 2009-03-30T12:18:48.527 回答
1

使用 std::map:

#include <map>

std::map <my_enum, my_datatype> m;
m[ a ] = whatever;
于 2009-03-30T12:19:43.847 回答