Мне нужно преобразовать бит [] в [] строк, которые представляют каждый бит в бите []

Я работаю над автоматизированной системой наблюдения за устаревшими методами регистрации текущего статуса "Проекта". В взаимодействии с GUI в этой системе используются так называемые "флаги", которые пользователь может "проверять" для обозначения текущего статуса. проект. Существует 11 возможных полей, которые можно установить, и система принимает несколько вариантов выбора.

Например, пользователь может установить флажок "Подтверждено", или "Требуется проверка", или "Запланировано", или "Разговор с клиентом" (существует 11 возможных вариантов выбора).

Вот в чем проблема - кто бы это ни написал, они сохранили эти выборки в базе данных в "битовой сумме", так что вы видите int исходного бита [] для выбора флажка.

Что мне нужно сделать, это прочитать целое число из базы данных и превратить его обратно в битовый массив из 11 значений 1 || 0 затем из этого битового массива мне нужно определить, какие ящики со строковым значением проверены, чтобы определить погоду или нет, мне нужно выполнить автоматическое наблюдение.

Таким образом, в основном, если проверено "Подтверждено", я не хочу следить, если проверено "Требуется продолжение", мне нужно следить.

Проблема здесь в том, что может присутствовать несколько вариантов выбора.

Так что после того, как int превращается в немного [], мы имеем, например,

1,0,1,0,0,0,1,1,1,0,1, где каждое int представляет флажок.

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

1 ответ

Обычный способ сделать это в C# - использовать перечисление флагов - это как раз то, чем является ваше битовое поле.

[Flags]
enum ProjectStatus
{
    Confirmed = 1,
    NeedsFollowUp = 2,
    SpokenWithClient = 4,
    ....
}

Чтобы проверить, установлен ли определенный флаг:

ProjectStatus status = (ProjectStatus)intFromDb;
if( ( status & ProjectStatus.Confirmed ) == ProjectStatus.Confirmed )
    // the Confirmed flag is set

Также есть Enum.HasFlags метод расширения, который упрощает это, если вы находитесь в.NET 4 или выше.

Если вы не хотите делать это таким образом, вы можете узнать, находится ли бит в положении x устанавливается следующим образом:

bool isSet = ( intFromDb & ( 1 << x ) ) != 0;

И используйте это, чтобы построить свою строку.

Изменить: Я бы также предложил вам прочитать немного о побитовых операторах и что они делают. Это может быть хорошим началом: http://blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx

Другие вопросы по тегам