Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371240
  • 博文数量: 84
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-12 20:30
文章分类

全部博文(84)

文章存档

2010年(18)

2009年(27)

2008年(39)

我的朋友

分类: C/C++

2009-04-01 09:08:40


题目:将16进制的数值转换成字符存放在缓冲区内

要求1:查找缓冲区内是否有能存放已经转换的字符的空间。

要求2:能使MessageBoxAPI函数显示此缓冲区内的字符,要求结果正确。

要求3:不允许使用连接字符串函数。

在网上做别人的出题,写下了程序:

 

/*****************************************
本程序的思路是不断输入整数,转换成十六进制字符放入
缓冲区中,直到用户输入结束字符或缓冲区空间不够
退出循环,输出缓冲区中的十六进制,不知道和LZ的的原题想法是不是一样
DEVC++测试通过 乱乱
********************************************************************/

#include
#include
#define BufferLenth 512  /*缓冲区大小*/

  char * pHex;               
  int i;

void itoHex(unsigned int num) /*无符号整形转16进制字符*/
{  i=0;
    if (num==0) pHex[i++]='0';                    /*输入是0的情况*/
  for (;num>0;num/=16,i++)
      if (num%16<10) pHex[i]=num%16+'0';  /*进制转换,把十六进制倒序放入pHex数组*/
      else pHex[i]=num%16+55;
  }
int main()
{unsigned int num;
 int j=0;
 char *buffer;
 pHex=  (char *)calloc(2*sizeof(int),sizeof(char)); /*申明 存放16进制字符的指针*/
 buffer =(char *)calloc(BufferLenth,1); /*申请 一个BufferLenth大的缓存区*/
 while(printf("Input a number (q to quit):")&& scanf("%u",&num)==1)
 {
   itoHex(num);
       if (j+i-1      {
      for (i--;i>=0;i--)  buffer[j++]=pHex[i];    /*十六进制放入buffer中*/
      if(j       printf("The number is in the buffer!\n");
    
      }
      else {printf("The buffer have not enough space!\n");break;} /*缓冲区空间不够退出*/
     
  }
      printf("\nAll chars in the buffer is: \n ");
     j=0;
     while(buffer[j]!='\0'&& j     free(buffer);
     free(pHex);
 getch();
 return 0;
}

阅读(2244) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~