考虑以下数据:
char a=12,b=30;
int c=0;
我希望变量c将组合值存储为c = 1230。 即int数据类型有2个字节,第一个字节应该保存a的值,第二个字节应该保存b的值。 PS:使用运算符的soln会很棒,也欢迎任何其他建议。
答案 0 :(得分:3)
您可以使用按位运算作为替代方法。 char保证为1个字节,因此您可以通过移动一个char来存储它,然后使用操作OR来组合它们:
int combine(char c1, char c2) {
return c1 | c2 << 8;
}
然后你可以使用AND和右移来再次拆分它们:
void split(int in, char *c1, char *c2) {
*c1 = in & 0xff;
*c2 = in >> 8;
}
但是,这不会为您提供所需的输出,但它会在一个int中存储两个字符。
答案 1 :(得分:2)
1230 = 12 * 100 + 30.因此,您似乎可以将a*100+b
分配给c
。
但如果a
或b
不在0..99(含)范围内,则可能无法按照您想要的方式运作。
答案 2 :(得分:0)
你也可以使用像这样的联盟
typedef union {
char bytes[2];
int integer;
} combined;
然后存储像
这样的字符char a = 12;
char b = 30;
combined c;
c.bytes[0] = a;
c.bytes[1] = b;
和c.integer现在将存储两个字符。但请注意,由于int
通常是32位宽,因此16位将是&#34; random&#34;,因此您无法比较以这种方式创建的两个int
。更好的选择是short
。
与其他答案一样,这并没有为您提供所需的输出,而只是一种在int中存储两个字符的方法。