我通过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);