【问题标题】:converting a ascii to int将 ascii 转换为 int
【发布时间】:2010-11-25 17:30:50
【问题描述】:

gcc 4.5.1 c89

我有一个用 char 字符填充的缓冲区。我需要比较它们:

这是缓冲区的示例内容:

vote buffer [ 51 ]
vote buffer [ 32 ]
vote buffer [ 49 ]
vote buffer [ 32 ]
vote buffer [ 50 ]
vote buffer [ 32 ]
vote buffer [ 53 ]
vote buffer [ 32 ]

我正在尝试获取缓冲区中这些 char 的 int 等效值以进行比较。

#define NUMBER_OF_CANDIDATES 7
if((vote_data.vote_buff[i] > NUMBER_OF_CANDIDATES || vote_data.vote_buff[i] < 1) {
    /* Do something */
}

正如你所看到的,在 if 语句中它永远不会是真的,因为范围要大得多。

我已尝试转换为 (int)。然而,这并没有解决问题。

我想我可以从 ascii 字符集计算。但是,如果我不能帮助它,我宁愿不增加更多的复杂性。

非常感谢您的建议,

【问题讨论】:

  • 我不明白你的问题。可以肯定的是,51 的投票缓冲区 [0] 大于 7 的 NUMBER_OF_CANDIDATES。你能更精确一点吗?
  • 51 是 ascii 字符 3。所以我需要将 3 与 NUMBER_OF_CANDIDATES 进行比较。谢谢。

标签: c


【解决方案1】:

如果只想将单个字符转换为int,可以使用c - '0'(相当于c - 48)。如果要转换多个字符的字符串,请使用sscanf()

【讨论】:

    【解决方案2】:

    您可以使用 atoi 将字符串转换为整数。 C中char和int是一样的

    int main (int argc, char** argv)
    {
     int n=65;
    
    
     char* String;
    
     String="1234";
    
    
     printf("String: %s - Integer: %d\n", String, atoi(String));
    
    
     printf("int %d is char: %c\n ", n, n);
    
    }
    

    【讨论】:

      【解决方案3】:

      标准库中没有内置任何东西可以将char 转换为int。这是因为大多数ints 不适合char。然而,有几种方法可以将字符串转换为int,因为这种方法更为常见。您可以通过将每个 char 复制到长度为 2 且第二个字符为 0 的第一个元素中,并将其用作 atoi()sscanf()strtol() 的输入来轻松使用它们。 (我建议在实际程序中使用最后两个之一,因为它们允许进行错误检查。)

      char buffer[2] = {0,0};
      int i;
      
      for (i = 0; i < vote_count; ++i) {
          int vote;
          buffer[0] = vote_data.vote_buff[i];
          vote = atoi(buffer);
          /* handle vote */
      }
      

      使用 ASCII 值并减去 '0' 当然是一个可行的选择。任何合理的字符集都会按顺序排列数字。

      最好的办法是更改接口,这样您的例程就不会收到char 的数组,而是int 的数组。程序的外部接口应该负责清理输入并将其变成易于处理的东西。目前,没有办法轻易地改变程序来支持十多个候选人。让输入例程存储 ints 可以解决此问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多