将字符串转换为十进制

我正在使用RS232串行通讯来旋转电机。 串行通信是在字符串中完成的,但我需要十进制值。 任何线索如何继续。我在c语言编码。我尝试使用atoifunction,但它无法正常工作。

char *p; 

int z=atoi(p);

通常给出一个字符串:

 char * myStr= "123"; 

获取它作为int的值的方法是:

 int value=atoi(myStr); 

有些事情需要注意:

以下内容包括:

 #include  

并且你必须确保你的字符串是一个以空字符结尾的字符串,否则atoi会使程序崩溃。

您没有给我们提供太多信息,但是如果您正在编程微控制器(我怀疑,因为您告诉我们有关电机的信息),您可能不想使用stdlib。 在这种情况下,您可能使用了costum函数。

请看下面的代码:

 int stringToInt(char* nrStr){ int nrChars=0; while(nrStr[nrChars]!='\0'){ nrChars++; } int result=0; int i=0; while(nrStr[i]!='\0'){//while you dont get to the end of the string int digit=nrStr[i]-48;//48 is zero ascii code int exp=nrChars-i-1; int add=digit*power(10,exp); result+=add; i++; } return result; } int power(int base, int exp){ int ret=1; int i; for(i=0;i 

这不使用任何库函数并完成工作。 我已经在3分钟内完成了它可能有一些小错误,它不是非常有效并且不validation可能的错误,但原则上如果你传递strinToint函数一个格式良好的整数作为空终止字符串它将输出正确的值。

如果你正在使用一个确实有一些电源function实现的库,请使用它而不是我给你的那个,因为它根本没用。

最后一点注意:如果你出于某种原因需要在其他基础上使用它来说八进制基础,你必须有机会这样:

 int add=digit*power(10,exp); 

至:

  int add=digit*power(8,exp); 

对于hex,这将不起作用,并且这种function的实现将显着不同。

使用strtoXXX()函数系列。 如果您需要intlonglong long或其无符号变体:

 long l = strtol("1234567", NULL, 10); long long ll = strtoll("1234567", NULL, 10); unsigned long l = strtoul("1234567", NULL, 10); 

如果你需要floatdoublelong double使用:

 float f = strtof("3.1415927", NULL); double d = strtod("3.1415927", NULL); 

手册在这里和这里 。