【问题标题】:How to parse byte using bits value如何使用位值解析字节
【发布时间】:2011-01-17 12:42:17
【问题描述】:

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

位组合如下

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

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

样本值为

11010001 = 209 十进制

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

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

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      我假设您不想要这些位的十进制值,而是包含它们的值的 int。整数在内部仍然表示为二进制数。仅在转换为字符串后才会以 10/十进制表示 int。

      【讨论】:

        猜你喜欢
        • 2015-09-09
        • 2019-07-15
        • 2018-06-25
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 2019-09-18
        • 1970-01-01
        • 2012-01-24
        相关资源
        最近更新 更多