c語言數據格式轉換

void floatTochar(float f,unsigned char s[])//轉換返回長度 

void intTochar(unsigned int inter,unsigned char buf[],unsigned char len)//指定長度轉換

#include "math.h"
void floatTochar(float f,unsigned char s[])//轉換返回長度
{
  //int dotsize=2; //保留小數點後兩位
	
	unsigned long int value,size,length;
	int i,j;//防止j=length-1爲負數
	unsigned char temp,isNegative;
	size=0;	//value=0的情況
/*	for(i=0;i<dotsize;i++)		  //這種方法不行,結果異常
	{
		f=f*10; //保留小數點後兩位
	} 
	value=(unsigned long int)f;	*/
	if(f<0)
	{
		f=0-f;
		isNegative=1;
	}
	value=(unsigned long int)(f*100);//浮點轉整型
	//分離整數,並轉爲ascii碼
	for(i=0;value>0;i++)
	{
		s[i]=value%10+'0';
		value=value/10;
	}
	size=i;
	length=size;
	for(i=0,j=length-1;length>1;length/=2)
	{
		temp=s[i];
		s[i]=s[j];
		s[j]=temp;
		i++;
		j--;
	}
  	//考慮以下小數點後的三種情況
	length=size;
	if(length==0)	 //0.001
	{
		s[length+2]='0';
		s[length+1]='0';
		s[length]='0';
		size=size+3;
	}
	if(length==1)	 //0.01
	{
		s[length+1]=s[length-1];
		s[length]='0';
		s[length-1]='0';
		size=size+2;
	}
	if(length==2)	 //0.1
	{
		s[length]=s[length-1];
		s[length-1]=s[length-2];
		s[length-2]='0';
		size=size+1;
	}
	//考慮小數點前的位數情況,規定小數點前2位數
	if(size==3)	//小數點前1位的情況
	{
		for(i=0;i<size;i++)
		{
			s[size-i]=s[size-i-1];
		}
		s[0]='0';
		size++;
	}

	for(i=0;i<2;i++)
	{
		s[size-i]=s[size-i-1];
	}
	s[size-i]='.';
	size++;

	s[size]='\0';
	size++;

	for(i=0;i<size;i++)
	{
		s[size-i]=s[size-i-1];
	}
	if(isNegative==1)
	{
		s[0]='-';
		size++;
	}
	else
	{
		s[0]='+';
		size++;
	}
}

void intTochar(unsigned int inter,unsigned char buf[],unsigned char len)//指定長度轉換
{ 
  int i;
  for(i=len-1;i>=0;i--)
  {
    buf[i]=inter%10+'0';
    inter=inter/10;
    //buf[i]=inter%((unsigned int)pow((double)10,(double)(len-i)))/((unsigned int)pow((double)10,(double)(len-1-i)))+'0';
  }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章