如何在整数变量中组合并存储2个char变量?

时间:2016-11-12 11:34:25

标签: c memory-management bitwise-operators type-conversion

考虑以下数据:

char a=12,b=30;
int c=0;

我希望变量c将组合值存储为c = 1230。 即int数据类型有2个字节,第一个字节应该保存a的值,第二个字节应该保存b的值。 PS:使用运算符的soln会很棒,也欢迎任何其他建议。

3 个答案:

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

但如果ab不在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中存储两个字符的方法。