2个字节表示C中的3个整数

Doo*_*Bar 6 c

我有两个字节,8位八位字节,应该读作:[3位] [4位] [3位].

例:

unsigned char octet1 = 0b11111111;  // binary values
unsigned char octet2 = 0b00000011;
Run Code Online (Sandbox Code Playgroud)

整数:[7] [15] [7].

任何人都可以给我一个提示从哪里开始?

Jon*_*röm 9

在一种伪代码中

octet1 = 0b11111111
octet2 = 0b00000011
word = octet1 | octet2<<8
n1 = word & 0b111
n2 = word>>3 & 0b1111
n3 = word>>7 & 0b111
Run Code Online (Sandbox Code Playgroud)


kri*_*iss 3

在提取我们想要的位之前不需要将两个字节放在一起。

#include <stdio.h>

main()
{
    unsigned char octet1 = 0b11111111;
    unsigned char octet2 = 0b00000011;
    unsigned char n1 = octet1 & 0b111;
    unsigned char n2 = (octet1 >> 3) & 0b1111;
    unsigned char n3 = (octet1 >> 7) | (octet2 + octet2);

    printf("octet1=%u octet2=%u n1=%u n2=%u n3=%u\n",
              octet1, octet2, n1, n2, n3);

}
Run Code Online (Sandbox Code Playgroud)