2个签名短签

时间:2016-03-14 13:15:14

标签: c++ char integer signed

我有两个字符值char_1char_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

2 个答案:

答案 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