【问题标题】:how can i combine and store 2 char variables in an integer variable?如何将 2 个 char 变量组合并存储在一个整数变量中?
【发布时间】:2016-11-12 11:34:24
【问题描述】:

考虑以下数据:

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用按位运算作为替代方案。一个 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 中存储两个字符。

    【讨论】:

    • s/0b11111111/0xff/?
    • @BjornA。这看起来确实更整洁。我可能应该研究十六进制,啊哈。谢谢!
    【解决方案2】:

    1230 = 12*100 + 30。看来您可以将a*100+b 分配给c

    但如果 ab 不在 0..99(含)范围内,则可能无法按您希望的方式工作。

    【讨论】:

      【解决方案3】:

      你也可以使用这样的联合

      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 位将是“随机的”,因此您无法比较以这种方式创建的两个 ints。更好的选择是short

      与其他答案一样,这不会为您提供所需的输出,而只是将两个字符存储在 int 中的一种方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-10
        • 2018-10-23
        • 2023-03-23
        • 1970-01-01
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多