【问题标题】:Extract integer from char buffer从 char 缓冲区中提取整数
【发布时间】:2009-06-23 10:58:30
【问题描述】:

我在 C 中有一个非常简单的问题。我正在逐行读取文件,并将其存储在 缓冲区

char line[80];

每一行的结构如下:

Timings results : 2215543
Timings results : 22155431
Timings results : 221554332
Timings results : 2215543

我想要做的是从这一行中提取整数值。这里的 C 是否提供任何简单的功能让我可以做到这一点?

谢谢

【问题讨论】:

    标签: c


    【解决方案1】:

    可以每行使用 sscanf,例如:

    #include <stdio.h>
    int time = -1;
    char* str = "Timings results : 120012";
    
    int n = sscanf(str, "Timings results : %d", &time);
    

    在这种情况下,n == 1 表示成功

    【讨论】:

      【解决方案2】:

      是的 - 试试atoi

         int n=atoi(str);
      

      在您的示例中,您在整数之前有一个固定前缀,因此您可以在将其传递给 atoi 之前简单地向 szLine 添加一个偏移量,例如

         int offset=strlen("Timings results : ");
         int timing=atoi(szLine + offset);
      

      相当高效,但不能很好地处理与预期不符的行。你可以先检查每一行:

         const char * prefix="Timings results : ";
         int offset=strlen(prefix);
         char * start=strstr(szLine, prefix);
         if (start)
         {
             int timing=atoi(start+offset);
      
             //do whatever you need to do
         }
         else
         {
             //line didn't match
         }
      

      您也可以使用sscanf 来解析这样的行,这样可以使代码更简洁:

         int timing;
         sscanf(szLine, "Timings results : %d", &timing);
      

      最后,请参阅Parsing Integer to String C 了解更多想法。

      【讨论】:

      • 您仍然需要解析字符串,因为如果您的字符串以非数值开头,则 atoi() 不会返回 0?
      • strtolatoi 更好,因为它允许您处理错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多