使用枚举进行位移
Bit shifting with enums
我有 4 个属性,想将它们移动到一个名为 controlByte 的字节中。例如,TypeEnum 有 4 个条目(0 = 未知,1 = 红色,2 = 蓝色,3 = 绿色)
- 位 0-1:TypeEnum
- 位 2-3:SpeedEnum
- 位 4:有效
- 第 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
我不确定枚举的逻辑是否正确。但是带有 IsActive 的第三行不起作用。设置索引为 0 的位而不是索引为 4
的位
controlByte = (byte) (controlByte | ((IsActive ? 1 : 0) << 4));
你的条件是这样的:IsActive? then 1, not active then (0 with 4 left shift) a.k.a 0
我有 4 个属性,想将它们移动到一个名为 controlByte 的字节中。例如,TypeEnum 有 4 个条目(0 = 未知,1 = 红色,2 = 蓝色,3 = 绿色)
- 位 0-1:TypeEnum
- 位 2-3:SpeedEnum
- 位 4:有效
- 第 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
我不确定枚举的逻辑是否正确。但是带有 IsActive 的第三行不起作用。设置索引为 0 的位而不是索引为 4
的位controlByte = (byte) (controlByte | ((IsActive ? 1 : 0) << 4));
你的条件是这样的:IsActive? then 1, not active then (0 with 4 left shift) a.k.a 0