2009-07-22 21:17:00 chocolate001 阅读数 11951
  • 《C语言基础》 之 第9章 字符串

    课程内容:字符数组1、字符串越位的问题、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、strlen函数、strcpy函数和strncpy函数、strcmp函数和strncmp函数、strcat函数和strncat函数。

    3472 人正在学习 去看看 张先凤

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字 符串,下面列举了各函数的方法及其说明。

itoa():将整型值转换为字符串。

ltoa():将长整型值转换为字符串。

ultoa():将无符号长整型值转换为字符串。

gcvt():将浮点型数转换为字符串,取四舍五入。

ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

fcvt():指定位数为转换精度,其余同ecvt()

还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢。下列程序演示了如何使用itoa()函数和gcvt()函数:

程序输出结果:

   str_int: 435
   str_double: 435.10001

itoa()的参数10表示按十进制类型进行转换,转换后的结果是"435",如果按二进制类型进行转换,则结果为"1101110011"

gcvt()中的参数8表示精确位数,这里得到的结果是"435.10001"

2014-01-18 15:42:09 lidec 阅读数 2194
  • 《C语言基础》 之 第9章 字符串

    课程内容:字符数组1、字符串越位的问题、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、strlen函数、strcpy函数和strncpy函数、strcmp函数和strncmp函数、strcat函数和strncat函数。

    3472 人正在学习 去看看 张先凤

/************************************************
功能:将整形转换为ascii码字符串
示例:dat = 12345   buffer[10]
      转换后
   buffer[0] = '1'
   buffer[1] = '2'
   ...
   buffer[4] = '5'
   buffer[5] = '\n'
**********************************************/
void DtoA(unsigned long dat, unsigned char* buffer)
{
  unsigned long tmp = dat;
  char length = 0;

  while(tmp != 0)//求出数字的实际长度
  {
    tmp = tmp/10;
    length++;
  }
  buffer[length] = '\0';//长度数为字符串截止位
  length--;

  while(length >= 0)//数字的低位放入数组的高位
  {
    tmp = dat%10;
    buffer[length--] = 0x30|tmp;

    dat = dat/10;
  }  
}

/****************************************************
功能:将ascii码字符串(非ascii也可)转换成对应数字

unsigned char code date[] = "1234567";     ->   返回 1234567
unsigned char code date_neg[] = "-1234567";      ->   返回 -1234567
****************************************************/
long mi(unsigned char dat, unsigned char mi)
{
  unsigned char i;
  long sum = 1;

  for(i=0; i<mi; i++)
  {
    sum = sum * dat;         
  }

  return sum;
}

long AtoD(unsigned char* buffer)
{
   long dat = 0, tmp = 0,k;
   unsigned char i;
   char j = 0;

   i = strlen(buffer);
   if(buffer[0] == '-')
   {
      j = 1;   
   }
   for(; j<i; j++)
   {
        tmp = buffer[j]&0x0f;//如果原数组中存放的是ascii码,直接将其转换为数字
   k = mi(10,i-j-1);
   tmp = k * tmp;
   dat += tmp;
    }

    if(buffer[0] == '-')
    {
      return -dat;
    }
 
    return dat;
}

void SendString(unsigned char* String)
{
  int i=0;
  while(String[i] != '\0')
  {
    SendData(String[i]);
    i++;
  }
}
void SendDig(long dat)
{
  char buffer[36];
  DtoA(dat, buffer);
  SendString(buffer);
}

2015-07-29 12:29:34 onlyou2030 阅读数 809
  • 《C语言基础》 之 第9章 字符串

    课程内容:字符数组1、字符串越位的问题、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、strlen函数、strcpy函数和strncpy函数、strcmp函数和strncmp函数、strcat函数和strncat函数。

    3472 人正在学习 去看看 张先凤



经常要用到将输入的字符串数字转为double,特写了一个函数,供以后直接调用。


//string to double
double StringToDouble(char *str)
{
  int i=0;
  int integer=0;               //the integer part
  double decimals=0.0;         //the decimals part
  int count=0;                 //the digit of the decimals
  int signFlag=1;
  if(str[i]=='-')
    {
      signFlag=-1;
      i++;
    }
  while(str[i]!='\0' && str[i]!='.')     //if not end and not the dot
    {
      integer=integer*10+(str[i]-'0');
      i++;
    }
  if(str[i]=='\0')
    return double(signFlag*integer);
  i++;
  while(str[i]!='\0')
    {
      count++;
      decimals=decimals*10+(str[i]-'0');
      i++;
    }
  cout<<count<<endl;
  for(int j=0;j<count;j++)
    decimals/=10;
  return double(signFlag*((integer)+decimals));
}


2005-04-23 10:24:00 jammyxu 阅读数 7144
  • 《C语言基础》 之 第9章 字符串

    课程内容:字符数组1、字符串越位的问题、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、strlen函数、strcpy函数和strncpy函数、strcmp函数和strncmp函数、strcat函数和strncat函数。

    3472 人正在学习 去看看 张先凤

在单片机中,常用到数字与字符的方法,在C中都是使用itoa函数,C51也有这个函数,但是,8051的RAM是很有限的,所以尽量避免使用int型,常用的是unsigned char。当需要转换成字符串时用itoa的话,还是有点浪费。还是自力更生,自己写了一个,代码如下:

typedef unsigned char BYTE;
BYTE * ByteToStr(BYTE n)
{
 BYTE str[4];
 BYTE * pStr;
 pStr = str;
 if (n>99)
 {
   *pStr = n/100;
   n %= 100;
   *pStr += '0';
   pStr ++ ;
   *pStr = n/10;
   n %= 10;
   *pStr += '0';
   pStr ++ ;
 }
 if (n>9)
 {
  *pStr = n/10;
  n %= 10;
  *pStr += '0';
  pStr ++ ;
 }
 if (n<10)
 {
  *pStr = n + '0';
  pStr ++;
 }
 *pStr = 0;
 return str;
}

用了5Byte内存,不知是否精简,先用着再说!String 转 unsigned char的要反过来先减'0'再乘,不过要检查是否小于等于255。等写好了再放上来

2013-08-09 00:33:56 weiqifa0 阅读数 2483
  • 《C语言基础》 之 第9章 字符串

    课程内容:字符数组1、字符串越位的问题、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、strlen函数、strcpy函数和strncpy函数、strcmp函数和strncmp函数、strcat函数和strncat函数。

    3472 人正在学习 去看看 张先凤

修改函数原型,确保每次malloc后可以释放堆控件

char * HexToString(char *str,unsigned char Hex[],unsigned char lenth)
{
    unsigned char i=0,j=0;
    unsigned char tema,temp;
    //char *str=(char*)malloc(lenth*2);
    for(i=0;i<lenth;i++)
    {
        tema=(Hex[i]>>4)&0x0F;
        str[j]=IntToStr(tema);
        j++;
        temp=Hex[i]&0x0F;
        str[j]=IntToStr(temp);
        j++;
    }
    str[j]='\0';
    return str;
}
<pre name="code" class="cpp">char *strH=(char*)malloc(4*2);
   QByteArray macStr=HexToString(strH,addrC,4);
   if(strH!=NULL)free(strH);






今天做东西要用这个,读出来的ID号是16进制的,但是返回给上层的是字符串,LINUX下的底层函数想不到。比如unsigned char temp[10]={0xAB,0XAB,0XAB,0XAB,0XDB,0XEB,0XAB,0XAC,0XAC,0xee};我要输出的就是这样子,底层传上来的不是ASCII码。蛋痛得很`其他资料也没找到,本来想用sprintf函数的。可是完全不对头。后面已经写了这个功能函数。

# include <stdlib.h>


#define DATA_LENGTH 20
//函 数 名:StrToInt()
//功能描述:把字符转换成对应的数字,比如a转换成10
char StrToInt(char aChar)
{
    char ss;
    switch(aChar)
    {
        case '0': ss= 0;break;
        case '1': ss= 1;break;
        case '2': ss= 2;break;
        case '3': ss= 3;break;
        case '4': ss= 4;break;
        case '5': ss= 5;break;
        case '6': ss= 6;break;
        case '7': ss= 7;break;
        case '8': ss= 8;break;
        case '9': ss= 9;break;

        case 'A': ss= 10;break;
        case 'B': ss= 11;break;
        case 'C': ss= 12;break;
        case 'D': ss= 13;break;
        case 'E': ss= 14;break;
        case 'F': ss= 15;break;
        default:break;
    }
    //printf("%c\n",ss);
    return ss;
}



//函 数 名:HexToAsc()
//功能描述:把16进制转换为ASCII
char IntToStr(unsigned char aChar){
	char ss;
	switch(aChar)
	{
		case 0: ss= '0';break;
		case 1: ss= '1';break;
		case 2: ss= '2';break;
		case 3: ss= '3';break;
		case 4: ss= '4';break;
		case 5: ss= '5';break;
		case 6: ss= '6';break;
		case 7: ss= '7';break;
		case 8: ss= '8';break;
		case 9: ss= '9';break;

		case 10: ss= 'A';break;
		case 11: ss= 'B';break;
		case 12: ss= 'C';break;
		case 13: ss= 'D';break;
		case 14: ss= 'E';break;
		case 15: ss= 'F';break;
		default:break;
	}
	//printf("%c\n",ss);
    return ss; 
} 
char * HexToString(unsigned char Hex[],unsigned char lenth)
{
	unsigned char i=0,j=0;
	unsigned char tema,temp;
	char *str=(char*)malloc(lenth*2);
	printf("Large:-----%d\n",lenth*2);
	for(i=0;i<lenth;i++)
	{
		tema=(Hex[i]>>4)&0x0F;
		printf("%d\n",tema);
		str[j]=IntToStr(tema);
		printf("i=%d, %c\n",i,str[j]);
		j++;
		temp=Hex[i]&0x0F;
		printf("%d\n",temp);
		str[j]=IntToStr(temp);
		printf("i=%d, %c\n",i,str[j]);
		j++;
	}
	str[j]='\0';
	printf("Large:--j=%d\n",j);
	for(i=0;i<lenth*2;i++)
	{
		printf("kkkkk:i=%d  ;str[i]:%c\n",i,str[i]);
	}
	printf("wqf:%s\n",str);
	return str;
}

void main()
{
	char *str=NULL;
	unsigned char temp[10]={0xAB,0XAB,0XAB,0XAB,0XDB,0XEB,0XAB,0XAC,0XAC,0xee};
	str=HexToString(temp,10);
	printf("%s\n",str);
}


没有更多推荐了,返回首页