单⽚机中实现浮点数转换陈字符串
单⽚机中由于资源有限,如果直接使⽤库函数中的sprintf函数实现浮点数转换成字符串,很可能会在链接时出现RAM资源不够的错误,在⽹上搜到⼀个⽐较好的⽅法,给⼤家共享。
unsigned char Float2Char(float value, unsigned char*array);
可⽤于单⽚机中将浮点数的各个位的数值转换成字符串,转换结果保存在字符数组⾥,然后通过串⼝发送⾄串⼝调试助⼿上显⽰。实现⽅法是把浮点数的各位分别提取出来,保存成⼀个各元素都是ASCII码的数组。参考⽹上的程序并做了修改。
/********************************************************
VC6.0中测试代码
*/
#include <stdio.h>
#define uint8 unsigned char
#define uint32 unsigned int
unsigned char Float2Char(float value, unsigned char*array);
void main()
{
float fvalue = 26.8977f;
uint8 len = 0;
uint8 array[20];
uint8 i;
len = Float2Char( fvalue, array );
for( i=0; i<len; i++)
{
printf("%c",array[i]);
}
printf("len = %d\n", len); //len = 7
}
// 函数名:unsigned charFloat2Char(float Value,char *array)
// 描 述:将浮点数的各个位的数值转换成字符串,通过串⼝发送⾄上位机显⽰
// 参 数:float Value为欲转换的正数浮点数值,转换结果保存在字符数组*array⾥
unsigned char Float2Char(float value, unsigned char *array)
{
uint8 IntegerPart;
float DecimalPart;
uint8 i = 0;
uint8 j = 0;
char temp;
//分离整数和⼩数
if(value >= 1)
{
IntegerPart = (uint8)value;
DecimalPart = value - IntegerPart;
}
else
{
IntegerPart = 0;
DecimalPart = value - IntegerPart;
}
//处理整数部分
if(IntegerPart == 0)
{
array[0] = '0';
array[1] = '.';
i = 1;
}
else
{
while(IntegerPart > 0)
{
array[i] = IntegerPart % 10 + '0';
数组转换成字符串IntegerPart /= 10;
i++;
}
i--;
//fix the result
for(j=0; j<i; j++)
{
temp = array[j];
array[j] = array[i - j];
array[i - j] = temp;
}
i++;
array[i] = '.';
}
//convert the Decimalpart
i++;
array[i++] = (uint32)(DecimalPart * 10)%10 + '0'; array[i++] = (uint32)(DecimalPart * 100)%10 + '0'; array[i++] = (uint32)(DecimalPart * 1000)%10 + '0'; array[i++] = (uint32)(DecimalPart * 10000)%10 + '0'; array[i] = '\0';
return i;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论