У меня есть класс, который анализирует объект для отправки на другое аппаратное устройство. Класс содержит набор функций, которые либо включены, либо отключены (bools). Тем не менее, мы записываем слова в данные только на часть аппаратного обеспечения (по сути, uint или 16-разрядное целое число).
Поэтому мне нужно перевести
Feature1 (bool, true)
Feature2 (bool, false)
Feature3 (bool, false)
Feature4 (bool, false)
...
Feature16 (bool, false)
и разобрать его в одно слово:
000000000001
Устройство видит слово как little-endian, fyi.
Я пытался поразрядно - или против uint, но тот факт, что флаги являются bools, делает это грязным, поэтому мне было интересно, есть ли у кого-нибудь еще какие-нибудь хитрые предложения;)
РЕДАКТИРОВАТЬ : Не успел я опубликовать это, я расслабился и подумал об этом решении ...
private static ushort BooleanToUint(List<bool> bools)
{
ushort word = 0;
for(int i = 0; i < bools.Count; i++)
{
if(bools[i])
{
int twoToPower = (1 << i);
word = (ushort) (word + twoToPower);
}
}
return word;
}