将字符串转换为十进制

时间:2013-04-16 17:30:25

标签: c string serial-port decimal

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

char *p;

int z=atoi(p);

2 个答案:

答案 0 :(得分:2)

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

手册herehere

答案 1 :(得分:1)

通常给出一个字符串:

char * myStr= "123";

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

int value=atoi(myStr);

需要注意的一些重要事项:

以下内容是必要的:

#include <stdlib.h>

并且你必须确保你的字符串是一个以空字符结尾的字符串,否则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<exp;i++){
    ret*=base;
}
return ret;
}

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

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

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

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

为:

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

对于十六进制,这将不起作用,并且这种函数的实现将有很大不同。