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数量。