2016-04-21 167 views
-3

有什么办法可以将char *转换成int将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“*字符”不能分配给类型“INT”的实体类型的值MAIN.C

我需要得到的t1_st2_st3_s数值为整数。

+1

什么是't1_s - “0''什么意思? – Michael

+0

'char *'是一个指针。转换是实现定义的,应该总是使用'uintptr_t'或'intptr_t',而不是'int'或其他标准整数类型。 – Olaf

回答

0

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

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

或者sscanf,但基本思想相同...... – Joshua

+0

@Joshua是啊,scanf会更简单,不需要标记化。 :) – fluter

-1

如果你确信你的字符数组是一个数字,你可以使用:

int i = atoi (charArray); 
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] 
+0

不工作,在MSP430上使用它,嵌入式编程。 我通过UART接收这个字符串{3600,32300},之后它应该运行代码,这将与这个值工作....但它仍然无法正常工作。 – user5939530

+0

我对你的目标一无所知。如果您发布编译警告和错误消息,运行时警告或错误消息等,可能会有帮助。或者使用另一个答案中介绍的标记化方法。 –

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);