我必须从保存在位组合的三个部分中的字节中获取值。
位组合如下
| - - | - - - | - - - |
第一部分包含两位 第二部分包含 3 位 第三部分包含 3 位
样本值为
11010001 = 209 十进制
我想要的是创建三个不同的属性,它们可以获取上面定义的给定位的三个部分的十进制值。
如何从这个十进制数中获取位值,然后从各个位中获取十进制值..
最佳答案
只需使用移位和屏蔽即可。假设两位值位于字节的高位:
int value1 = (value >> 6) & 3; // 3 = binary 11
int value2 = (value >> 3) & 7; // 7 = binary 111
int value3 = (value >> 0) & 7;
最后一行当然不必使用移位运算符 - 移位 0 位不会执行任何操作。我认为这增加了一致性。
对于您的示例值,将给出 value1 = 3、value2 = 2、value3 = 1。
倒车:
byte value = (byte) ((value1 << 6) | (value2 << 3) | (value3 << 0));
关于c# - 如何使用位值解析字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713265/