【发布时间】:2011-01-17 12:42:17
【问题描述】:
我必须从保存在位组合的三个部分中的字节中获取值。
位组合如下
| - - | - - - | - - - |
第一部分包含两位 第二部分包含 3 位 第三部分包含 3 位
样本值为
11010001 = 209 十进制
我想要的是创建三个不同的属性,它们可以让我得到上面定义的给定位的三个部分的十进制值。
如何从这个十进制数中获取位值,然后从各个位中获取十进制值..
【问题讨论】:
标签: c#
我必须从保存在位组合的三个部分中的字节中获取值。
位组合如下
| - - | - - - | - - - |
第一部分包含两位 第二部分包含 3 位 第三部分包含 3 位
样本值为
11010001 = 209 十进制
我想要的是创建三个不同的属性,它们可以让我得到上面定义的给定位的三个部分的十进制值。
如何从这个十进制数中获取位值,然后从各个位中获取十进制值..
【问题讨论】:
标签: c#
只需使用移位和遮罩。假设两位值在字节的高位:
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));
【讨论】:
您可以使用位掩码提取不同的部分,如下所示:
int part1=b & 0x3;
int part2=(b>>2) & 0x7;
int part3=(b>>5) & 0x7;
这会将每个部分转移到最低有效位,然后使用二进制并屏蔽所有其他位。
我假设您不想要这些位的十进制值,而是包含它们的值的 int。整数在内部仍然表示为二进制数。仅在转换为字符串后才会以 10/十进制表示 int。
【讨论】: