如何使用位值解析字节

时间:2011-01-17 12:42:17

标签: c#

我必须从保存在位组合的三个部分中的字节中获取值。

比特组合如下

| - - | - - - | - - - |

第一部分包含两位 第二部分包含3位 第三部分包含3位

样本值是

11010001 = 209十进制

我想要的是创建三个不同的属性,它获得上面定义的给定位的三个部分的十进制值。

如何从此十进制数中获取位值,然后从各个位获取十进制值..

2 个答案:

答案 0 :(得分:5)

只需使用移位和遮罩。假设两位值位于字节的高位:

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));

答案 1 :(得分:1)

您可以使用位掩码提取不同的部分,如下所示:

int part1=b & 0x3;
int part2=(b>>2) & 0x7;
int part3=(b>>5) & 0x7;

这会将每个部分转换为最低有效位,然后使用二进制并屏蔽所有其他位。

我假设你不想要这些位的十进制值,而是一个包含它们值的int。整数仍在内部表示为二进制数。只有在转换为字符串时才会出现以10或十进制表示的int。