我有两个字符值char_1
和char_2
。现在我想将它们组合成16位有符号整数值,其中char_1
包含MSB中的符号。
| SGN | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Bit 7 | Bit 6 | Bit 5 | Bit 4 |位3 |位2 |位1 |位0 |
|签署字符1 |其余的Char 1 | Char 2 |
我的尝试是:
signed short s = (((int)char_1) << 8) & (int)char_2;
现在s
...
答案 0 :(得分:5)
您需要按位or
而不是and
(((int)char_1) << 8) | (int)char_2;
由于你也在处理位,你也应该使用无符号类型(unsigned char,unsigned int,unsigned short。)
答案 1 :(得分:0)
联盟可能会实现更清洁的解决方案。
typedef union { short int s; char c[2];} Data;
int main (){
Data d;
d.c[0]=char_2;
d.c[1]=char_1;
}
注意:这可能不够便携,因为索引的顺序取决于架构的字节顺序。我的示例适用于Little endian archs(即Intel 0x86),但大端拱将打印char_2 char_1
。