我正在使用RS232串行通信来旋转电机。 串行通信以字符串形式完成,但我需要十进制值。 任何线索如何进行。我正在用C语言进行编码。我尝试使用atoi函数,但无法正常工作。

char *p;

int z=atoi(p);

===============>>#1 票数:3

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

这里这里的手册。

===============>>#2 票数:1 已采纳

通常给出一个字符串:

char * myStr= "123";

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

int value=atoi(myStr);

一些重要的注意事项:

以下包括是必要的:

#include <stdlib.h>

并且您必须确保您的字符串是一个以null结尾的字符串,否则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函数传递为格式良好的整数作为以null结尾的字符串,它将输出正确的值。

如果您使用的库确实具有幂函数的某些实现,请使用它代替我给您的函数,因为它根本没有效率。

最后一点:如果您出于某种原因需要以其他方式使用它,则以八进制为基础,那么您必须碰碰运气:

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

至:

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

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

  ask by user1437027 translate from so

未解决问题?本站智能推荐:

5回复

在C中将二进制转换为数字字符串转换为十进制数字

我编写了一个程序,要求用户使用字符串输入数字,然后该程序会将该数字转换为十进制,但是当我编译(使用-lm)并运行a.out时,我遇到了问题。我遇到了分段错误(核心已转储),不十分确定在哪里查找或如何修复它,又一个问题是我需要什么以便打印转换结果(printf(“ something ..”))?
3回复

使用字符串从十进制转换为二进制数字系统

我需要帮助尝试修复程序的第二部分,将十进制转换为二进制,这是我到目前为止所拥有的,并且在我对其进行编译时,我一直得到0,所以不确定我做错了什么。 有什么帮助吗?
4回复

将十进制转换为char / string

假设我有这个号码 这是以下内容的十进制表示形式: ÿÿ 我知道如何从单个字符中做到这一点 但这只会给我“ÿ” 我想不使用任何外部库,最好使用C类型的字符串来做到这一点。
1回复

将十六进制数字转换为十进制以进行比较(C)

我正在尝试创建一个程序,该程序确定是否正确创建了一个int十六进制文件,而我用来生成它们的一个程序却无法正确生成一个文件,因此我要制作一个。 到目前为止,我可以从目标文件中读取一行,但是将十六进制数从字符串转换为要比较的数字时遇到问题。 这是我令人烦恼的片段: 这些sprintf
4回复

WPF C#字符串转换为十进制,十进制转换为字符串问题

请帮我找出我的C#代码(WPF,事件处理程序)中的问题: 我无法使其工作-调试器在catPr = decimal.Parse(catPrStr);上显示错误 。 在另一个地方非常相似的代码也可以工作。 我对这种用于算术运算的字符串十进制转换的方法正确吗? 编辑(添加)
2回复

将字符串转换为十进制为字符串并返回十进制[复制]

这个问题在这里已有答案: 如何在十六进制和十进制之间转换数字 17个答案 我想将字符串转换为小数,然后转换为字符串,然后再转换为小数。 我试过了: 所以这些都不起作用! 没有简单的函数可以将精确的十进制再次转换为其字符串表示吗? 对于这么简单的
3回复

如何将字符串转换为十进制

我无法从字符串转换为十进制,这是lblTotal =“ 110,00€”的值,我想将其转换为十进制如何转换?
7回复

使用格式将字符串转换为十进制

我需要在C#中将String转换为十进制,但此字符串具有不同的格式。 例如: “50085” “500,85” “500.85” 这应该转换为小数500,85。 是否有使用格式进行此转换的简化形式?
1回复

如何将lambda中的字符串转换为十进制?

我有代码 在此,“总计”的类型是包含数字和字符的字符串,例如“ 14x56xz”。 我想从“总计”字符串中获取数字部分(例如1456)并将其转换为十进制数字,有时需要将其转换为负数,从而使代码如下所示: 我已经编写了一个类来处理它,但是我不知道如何在Linq中调用此处理方法。
2回复

将字符串转换为十进制基数C ++

因此,我要接收一条消息(msg),并使用十进制基数将其转换为所有数字(A = 65,B = 66等) 到目前为止,我接受了消息并将其另存为字符串,并尝试通过使用字符串流将其转换为十进制基数。 这是执行此操作的正确方法,还是有更简单/有效的方法? 这是我所拥有的: 示例运行: