将char *转换为int

时间:2016-04-21 15:36:30

标签: c

有没有办法将char *转换为int

我有一个从UART收到的字符串(string1)。此字符串如下所示:{3600,32,300}

char t1_s[32],t2_s[32],t3_s[32];

static char string1[15];

strcpy(t3_s, strtok(string1 , ","));
strcpy(t2_s, strtok(NULL,     ","));
strcpy(t1_s, strtok(NULL,     ","));

t1= t1_s - '0';
t2= t2_s - '0';
t3= t3_s - '0';

并且编译器发出警告:

  

#515-D类型" char *"不能分配给" int"类型的实体。 main.c

我需要将t1_st2_st3_s的值作为整数。

4 个答案:

答案 0 :(得分:0)

使用strtol将字符串转换为整数:

char *s = "3600";
char *error = NULL;
int n = strtol(s, &error, 10);
if (*error != '\0') {
     // handle error
}

答案 1 :(得分:0)

如果您的输入格式一致,您还可以使用sscanf()

#include <stdio.h>
#include <stdlib.h>

int 
main(int argc, const char** argv) 
{
    char inputString[] = "{3600,32,300}";
    int t1, t2, t3;

    sscanf(inputString, "{%d,%d,%d}", &t1, &t2, &t3);
    fprintf(stdout, "t1 [%d] t2 [%d] t3 [%d]\n", t1, t2, t3);

    return EXIT_SUCCESS;
}

编译并运行:

$ gcc -Wall so36774337.c -o so36774337
$ ./so36774337
t1 [3600] t2 [32] t3 [300]

答案 2 :(得分:0)

我会这样做:

char *string1 = "3600,32,300";
char *next;

t1=strtol(string1, &next, 10);
++next; // skip the ','
t2=strtol(string1, &next, 10);
++next; // skip the ','
t3=strtol(string1, &next, 10);

答案 3 :(得分:-1)

如果您确定您的char数组是一个数字,您可以使用:

int i = atoi (charArray);