Вопрос

Есть ли простой способ преобразовать битовую маску в индекс массива?

то есть.Если у меня есть перечисление

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

и я хочу сохранить связанные данные в массиве, есть ли простой способ преобразовать a в 0, b в 1, c в 2.и т. д?

Большое спасибо

Это было полезно?

Решение

r =   ln base 2 
and programmatically,

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

r is your answer

Другие советы

Я не уверен, что вы об этом спрашиваете, но почему бы вам просто не взять двухбазовый журнал?

Бревно2 н?

Я не знаю простого решения, о котором вы просили, но почему бы просто не использовать карту вместо массива?

Должно работать без каких-либо магических преобразований.

Используйте std::map:

#include <map>

std::map <my_enum, my_datatype> m;
m[ a ] = whatever;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top