Embedded 图C18:将双精度转换为字符串
我使用的是PIC18F2550。用C18语言编程。Embedded 图C18:将双精度转换为字符串,embedded,microcontroller,pic,c18,Embedded,Microcontroller,Pic,C18,我使用的是PIC18F2550。用C18语言编程。 我需要一个将double转换为字符串的函数,如下所示: void dtoa( char *szString, // Output string double dbDouble, // Input number unsigned char ucFPlaces) // Number of digits in the resulting fracti
我需要一个将double转换为字符串的函数,如下所示:
void dtoa( char *szString, // Output string
double dbDouble, // Input number
unsigned char ucFPlaces) // Number of digits in the resulting fractional part
{
// ??????????????
}
在主程序中这样调用:
void main (void)
{
// ...
double dbNumber = 123.45678;
char szText[9];
dtoa(szText, dbNumber, 3); // szText becomes "123.456" or rounded to "123.457"
// ...
}
所以写一个
5分钟,一张相纸和一杯咖啡就足够了。事实上,这是一个很好的面试问题,所以写一个吧 5分钟,一张相纸和一杯咖啡就足够了。
事实上,这是一个很好的面试问题Tiny printf可能适合您:Tiny printf可能适合您:一般来说,Newlib C库(BSD许可证,来自RedHat,Cygwin的一部分,用于许多“裸机”嵌入式系统编译器)对于标准C库中的有用资源来说,这是一个很好的起点 Newlib
dtoa.c
源位于源代码树的src/Newlib/libc/stdlib
子目录中:
- 联机源浏览器:
- 直接链接到当前版本的
文件:dtoa.c
这个文件会有点奇怪,因为Newlib使用了一些奇怪的宏来声明函数,但是应该可以直接进行修改——而且,由于获得了BSD许可,如果您保留了版权声明,您几乎可以对它做任何您想做的事。通常,Newlib C库(BSD许可证,来自RedHat,是Cygwin的一部分,并用于许多“裸机”嵌入式系统编译器)是一个很好的起点,可以从标准C库中的有用资源开始 Newlib
dtoa.c
源位于源代码树的src/Newlib/libc/stdlib
子目录中:
- 联机源浏览器:
- 直接链接到当前版本的
文件:dtoa.c
这个文件会有点奇怪,因为Newlib使用了一些奇怪的宏来声明函数,但是应该可以直接进行修改——而且,由于获得了BSD许可,如果你保留了版权声明,你几乎可以对它做任何你想做的事。sprintf()然后找到“.”并将正确的十进制字符设为null?@kenny sprintf()可能有点晕眩PIC@MartinBeckett如果你有足够的空间,我相信它是可用的。或者你可以自己使用dtoa()“可用”可能是一个微妙的问题,因为像MISRA这样的标准禁止使用变量参数……我在PIC18上一直使用sprintf,而且也是双倍的。sprintf()然后找到“.”并将正确的十进制字符设为null?@kenny sprintf()可能在一个PIC@MartinBeckett如果您有足够的空间,我相信它是可用的。或者使用您自己的dtoa()“可用”这可能是一个微妙的问题,因为像MISRA这样的标准禁止使用变量参数……我在PIC18上一直使用sprintf,而且也是双倍的。正如在那页上提到的:“当然,它很小,有局限性,不支持浮点…”啊,是的,很好的捕获。现在我隐约记得在我们自己的浮点中滚动。正如在那页上提到的:“当然很小,它有限制,没有浮点支持…”啊,是的,很好的捕获。现在我隐约记得在我们自己的浮点中滚动。