整数、浮点数转换成字符串

在一些应用中,需要将整数、浮点数转换成字符串,用于显示或者通过串口进行发送,常用的做法是使用sprintf函数对数据进行格式化输出,但是这样会导致内存的过量占用,在小容量的51单片机中或者DSP中会占用不小的内存,为接下来的开发带来难度,现在提供一个函数,可以直接调用将整数、浮点数转换成字符串。

1.整数转换成字符串

整数、浮点数转换成字符串_第1张图片

//整数转换成字符串,参数:生成的数组str,待转换的整数Num,整数长度为len
void Num2Str(char str[],int Num,unsigned char len)//显示数字,长度为len
{
	unsigned char i=0;
	while(len--)
	{
		str[len] = Num%10+0x30;
		Num = Num/10;
		i++;
	}
	str[i++] = '\0';
}

使用上列函数即可将整数自动转换成字符串,生成的字符串存在数组str中,其中的参数Num为待转换的整数,len为整数长度。

示例:

char str[20];
Num2Str(str,123,4);

结果:str = “0123”;//结尾带结束符

2.浮点数转换成字符串

整数、浮点数转换成字符串_第2张图片

//m^n函数
unsigned long oled_pow(unsigned char m,unsigned char n)
{
	unsigned long result=1;
	while(n--)result*=m;
	return result;
}

//浮点数转换成字符串,参数:生成的数组str,待转换的浮点数floa,整数长度为len1,小数长度为len2
void Float2Str(char str[],double floa,unsigned char len1,unsigned char len2)
{
	unsigned char i=0,j=0;
	unsigned int zhengshu = floa;
	unsigned int xiaoshu = (floa-zhengshu)*oled_pow(10,len2);
	while(len1--)
	{
		str[len1] = zhengshu%10+0x30;
		zhengshu = zhengshu/10;
		i++;
	}
	str[i] = '.';
	while(len2--)
	{
		str[i+len2+1] = xiaoshu%10+0x30;
		xiaoshu = xiaoshu/10;
		j++;
	}
	str[i+j+1] = '\0';
}

使用上列函数即可将浮点数自动转换成字符串,生成的字符串存在数组str中,其中的参数floa为待转换的浮点数,len1为整数长度,小数长度为len2。

示例:

char str[20];
Floa2Str(str,123.45,4,1);

结果:str = “0123.4”;//结尾带结束符

3.说明

程序没有进行优化,肯定有更好的写法,但是绝对是可行的方法,欢迎和大家一起讨论。

你可能感兴趣的:(C语言,字符串,c语言,单片机)