有没有办法将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_s
,t2_s
和t3_s
的值作为整数。
答案 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);