У меня есть 4 свойства, и я хочу переместить их в байт с именем controlByte. Например, TypeEnum имеет 4 записи (0 = Неизвестно, 1 = Красный, 2 = Синий, 3 = Зеленый)
- Бит 0-1: TypeEnum
- Бит 2-3: SpeedEnum
- Бит 4: IsActive
- Бит 5: Необязательно
Код:
Byte controlByte = 0;
controlByte = (byte) (controlByte | ((int)TypeEnum << 0));
controlByte = (byte) (controlByte | ((int)SpeedEnum << 2));
controlByte = (byte) (controlByte | (IsActive ? 1 : 0 << 4));
Ожидаемый результат:
| Optional | IsActive | Speed | Type |
Bit 7 5 4 2 0
Я не уверен, что логика c с перечислениями верна. Но 3-я строка с IsActive не работает. Бит с индексом 0 устанавливается вместо Бита с индексом 4