【问题标题】:How to change a char to an integer?如何将字符更改为整数?
【发布时间】:2013-05-31 09:44:24
【问题描述】:

我想将 char 数组的内容复制到 int 变量或数组中。例如,前五个值必须转到一个 int 数组 (int x):

char a[] = "123456";

我在其他线程中看到要将 char 更改为 int,我需要这样做:

int x = a[0] - '0';

还有其他方法吗?

如果我想要两个或多个一组的值,例如 12、34 和 56,该怎么办?

如果我没有将它们保存为整数,而是浮点数或其他类型怎么办?

【问题讨论】:

  • 您的问题要求太多。可以完成您想要完成的所有事情,但是您需要为每个任务编写一些代码。最通用的方法是使用 Union。
  • 你可以随时sscanf(),例如char a[] = "123456"; int b, c, d; sscanf(a, "%2d%3d%d", &b, &c, &d); printf("b=%d; c=%d; d=%d\n", b, c, d);
  • @pmg 但是,只要strtol()strtod() 可用,您为什么要这样做?
  • @H2 因为使用 scanf 您可以在一次操作中给出长度并将其转换为 12、34、56。
  • @H2CO3:查看我的编辑。可能有理由避免复制数字。使用sscanf(),您可以将转换限制为 2 或 3 或任何数字。

标签: c char type-conversion


【解决方案1】:

你必须做int x = a[0] - '0'; 的原因是因为 C 中的字符编码。发生的事情是你从字符中减去编码偏移量。这是一个包含所有编码值的表:UTF-8 encodings。因此,int x = a[0] - '0'; 在您的情况下等同于 int x = 49 - 48;,它具有您正在寻找的正确值。通过使用'0' 而不是0,您使用的是 char 值 0。

还有其他方法可以做到这一点,但这种方法效果很好。要使用其他类型,只需在创建 int 后进行类型转换。

John 获取两位数的方法效果很好。在这里转发,是number = 10 * digit1 + digit2

【讨论】:

    【解决方案2】:

    你在写轨道上,但是如果你想转换成整数数组,那么你 应该使用类似的东西

    int x[MAX_ELEM];
    
    for(int i =0; i<sizeof(a)/sizeof(char); i++)
    {
       x[i] = a[i] -'0';
    }
    

    对于其他情况,您需要单独处理。

    【讨论】:

    • 为了您的信息,sizeof(char) 始终是 1,所以您甚至不需要说出来。
    • 是的,这不是必需的。谢谢。
    【解决方案3】:

    回答您的问题:

    • 当然,还有其他方法可以做到这一点。您展示的方式将 ASCII 值转换为它所代表的数字,但还有其他方式。
    • 读入所需的字符数,将每个字符转换为数字,然后根据这些数字构造整数,例如 number = 10 * digit1 + digit2
    • 在构造整数后进行类型转换。

    【讨论】:

      【解决方案4】:

      将适当大小的字符串部分复制到单独的缓冲区并使用strtol()strtod()

      【讨论】:

      • @pmg 谢谢,我很懒 :P 顺便说一句,您可以使用 sscanf() 发布您的解决方案。
      • 就像你在 cmets 中所说的,sscanf() 很难正确使用。我觉得你的答案比我的更安全(因为复制/粘贴程序员最终会为我下一次度假的飞机编写代码)。
      • @pmg 这确实是明智的。 (可惜有复制粘贴程序员。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2020-07-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多