【发布时间】:2016-03-14 13:15:14
【问题描述】:
我有两个 char 值 char_1 和 char_2。现在我想将它们组合成一个 16 位有符号整数值,其中 char_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;
现在s 得到 0...
【问题讨论】:
-
请注意,您对整数大小的隐含假设是不可移植的。考虑使用来自
<cstdint>的固定宽度类型std::int8_t和std::int16_t。 -
可移植假设
signed char将能够保存带符号的 8 位数量,并且可移植假设 short 将保存带符号的 16 位数量。