Отображение 32-битного значения в другое состояние для каждого бита - PullRequest
1 голос
/ 19 марта 2012

Мне нужно реализовать какой-то бит для отображения состояния, и я не знаю, как реализовать эту вещь - возможно, у меня есть болван;)

Хорошо, у меня есть код состояния, который может бытьМаксимум.Например, длина 32 бита 1001 0011 Каждый бит принадлежит специальному коду статуса - строке.

Например:

Bit 1: String Cancel
Bit 2: String Okay
Bit 3: String Save
....
Bit 32: String Next

Теперь я должен определить, какие биты установлены, и вернуть все состояниекодовые строки, которые устанавливаются в 32-битном длинном состоянии.

Я предпочитаю использовать какой-нибудь словарь или что-то вроде этого, где я могу хранить для каждого бита соответствующий код состояния.Мне нравится зацикливать код состояния длиной 32 бита и получать соответствующую строку кода состояния из словаря - сохранить ее в строке и вернуть после того, как код состояния длиной 32 бита был пройден.

Кто-тоесть идея для этого?

1 Ответ

3 голосов
/ 19 марта 2012

Вы можете использовать перечисления с атрибутом flags. Enum может быть приведен от и до int. Каждое значение перечисления может быть установлено так, что ваш статус может выглядеть следующим образом

[Flags]
enum Status { None = 0 , Cancel = 1 , Ok = 2 , Save = 4 ... } 

Флаги атрибут

Указывает, что перечисление можно рассматривать как битовое поле; то есть, набор флагов.

вы можете проверить с

 if ((status & Status.Ok) == Status.Ok)
 {
 // Do something
 }
...