C中的逐位操作接收字符中的二进制



我通过C中的串行接收到2字节的二进制信息。

我收到了它们。

所以我需要将这两个字符连接起来以生成int,但我不确定如何做到这一点。。首先,第一个字节是二进制格式,而不是字符格式。。所以我不确定如何将它转换为适用于我的程序的形式。

只将它们OR在一起?

x = (b1 << 8) | b2;

确保它们是未签名的或相应地进行强制转换(转换签名的东西很讨厌)。

您可以使用这样的东西:

int my_int=char1;
myint<<=8;
myint|=char2;

这假定char1包含最高有效字节。否则切换1和2。

使用unsigned char来避免符号扩展问题。

val16 = char1 * 256 + char2;

首先,最好以无符号字符形式接收它们,这样就不会出现符号扩展等问题。

如果你想把它们组合起来,你可以使用类似的东西:

int val = ch1; val = val << 8 | ch2;

或:

int val = ch2; val = val << 8 | ch1;

这取决于您的系统的端序,并假设您的系统具有八位char类型。

如果MSB(最高有效字节)位于第一位:

unsigned char array[2];
...
int bla;
bla = array[1] | (array[0] << 8);

如果LSB(最低有效字节)先出现:

bla = array[0] | (array[1] << 8);

最新更新