从8位值获取最重要的位

tc9*_*c90 1 c++ binary endianness

我知道在这个网站上有类似的问题,但是,我似乎无法找到真正帮助我解决问题的东西.

至今:

我有1字节(8位),可以是1和0的任意组合.

例如:11000010是我的数据字节.(小端)

我需要做的是确定最高有效位(MSB),在这种情况下是11,是00,01,10,11还是从那里做其他事情.

到目前为止,我已经得到了将字节输出为11000010(存储在字符串中)并尝试从中提取11的程序.(如果我可以解决这个问题,那么创建一个switch case或if语句来检查我自己的内容是否足够简单).

**我对C++的表现不是很好,这就是我要求帮助的原因.

任何帮助是极大的赞赏.

Ste*_*ppo 7

您不需要将其存储为字符串,只需使用按位运算符:

unsigned char myByte = 0xc2; // 11000010
char twoMost = (myByte & 0xff) >> 6; // 00000011
Run Code Online (Sandbox Code Playgroud)

0xff"选择"(掩模)仅前8位,因此,如果该char类型实际上是大于8位,则一切被丢弃.

通过向右移动6位,您只能保留两个最重要的位.然后,您可以申请switch:

switch(twoMost) {
    case 0: // 00
        doSomething();
        break;
    case 1: // 01
        doSomething();
        break;
    case 2: // 10
        doSomething();
        break;
    case 3: // 11
        doSomething();
        break;
    default:
        // This is not possible, but better output an error message
}
Run Code Online (Sandbox Code Playgroud)