Мне нужно преобразовать бит [] в [] строк, которые представляют каждый бит в бите []
Я работаю над автоматизированной системой наблюдения за устаревшими методами регистрации текущего статуса "Проекта". В взаимодействии с 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