C++ 2个字符签名短

C++ 2个字符签名短,c++,char,integer,signed,C++,Char,Integer,Signed,我有两个字符值char\u 1和char\u 2。现在我想将它们组合成一个16位有符号整数值,其中char\u 1包含MSB中的符号 |SGN |位6 |位5 |位4 |位3 |位2 |位1 |位0 |位7 |位6 |位5 |位 4 |位3 |位2 |位1 |位0| |签名字符1 |字符1的其余部分|字符2| 我的尝试是: signed short s = (((int)char_1) << 8) & (int)char_2; signed short s=((int)ch

我有两个字符值
char\u 1
char\u 2
。现在我想将它们组合成一个16位有符号整数值,其中
char\u 1
包含MSB中的符号

|SGN |位6 |位5 |位4 |位3 |位2 |位1 |位0 |位7 |位6 |位5 |位 4 |位3 |位2 |位1 |位0|

|签名字符1 |字符1的其余部分|字符2|

我的尝试是:

signed short s = (((int)char_1) << 8) & (int)char_2;

signed short s=((int)char_1)您需要按位

(((int)char_1) << 8) | (int)char_2;

((int)char_1)通过联合可以实现更清洁的解决方案

typedef union { short int s; char c[2];} Data;

int main (){
        Data d;
        d.c[0]=char_2;
        d.c[1]=char_1;
}

注意:这可能对您来说不够便携,因为索引的顺序取决于体系结构的尾端性。我的示例在小尾端ARCH(即英特尔0x86)上运行得很好,但大尾端ARCH会打印
char\u 2 char\u 1

我是个傻瓜。谢谢您。
char\u 2
的演员阵容必须是
(unsigned int)
。如果char在您的平台上签名,并且char\u 1,char\u 2==1,0xff,那么您将以(请注意,您对整数大小的隐式假设是不可移植的。考虑使用固定宽度类型<代码>:ST8::It88t和<代码> STD::从代码< >代码>中。t数量。