c# - 使用枚举进行位移
问题描述
我有 4 个属性,想将它们转移到一个名为 controlByte 的字节中。例如,TypeEnum 有 4 个条目(0 = 未知,1 = 红色,2 = 蓝色,3 = 绿色)
- 位 0-1:类型枚举
- 位 2-3:速度枚举
- 位 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
我不确定枚举的逻辑是否正确。但是 IsActive 的第 3 行不起作用。设置索引为 0 的位而不是索引为 4 的位
解决方案
controlByte = (byte) (controlByte | ((IsActive ? 1 : 0) << 4));
您的条件如下所示: IsActive?然后 1,然后不活动(0 左移 4)又名 0
推荐阅读
- visual-studio-code - 如何将快照从 CodeSnap VSCode 扩展复制到剪贴板而不保存?
- r - 我可以用 R 写什么来表示“任何值”?
- spring - 如何将列添加到实体中不包含的数据库表
- javascript - 如何检索没有子类的 Javascript 值
- python - 如何使用正则表达式将包含 unicode 的字符串转换为拉丁字符
- javascript - 如何使谷歌图表动画仅在滚动时才开始?
- tailwind-css - 如何使用顺风更改 html 仪表元素背景颜色
- swiftui - 将 4 行的列表推到底部
- apache-kafka - 带有重复事件的 Kafka 设计问题
- flutter - Flutter 按值删除重复数组