16进制转ascii接口

来源:互联网 发布:上海网站关键词优化 编辑:程序博客网 时间:2024/06/05 22:31
 核心思想:将16进制的数字转成16进制的表示,那么printf16进制的值,打印的而必然是16进制对应的ascii。#include <stdio.h>      #include <unistd.h>      #include <string.h>      #include <sys/types.h>      #include <sys/stat.h>      #include <libgen.h>      #include <fcntl.h>      #include <stdlib.h>            typedef unsigned char uint8;            uint8 ConverseOneChar(uint8 ucChar)      {          uint8 ucTmp = 0x00;         // printf("one ucChar= 0x%x\n", (char)ucChar);          switch(ucChar)          {          case '0':              ucTmp = 0x00;              break;          case '1':              ucTmp = 0x01;              break;          case '2':              ucTmp = 0x02;              break;          case '3':              ucTmp = 0x03;              break;          case '4':              ucTmp = 0x04;              break;          case '5':              ucTmp = 0x05;              break;          case '6':              ucTmp = 0x06;              break;          case '7':              ucTmp = 0x07;              break;          case '8':              ucTmp = 0x08;              break;          case '9':              ucTmp = 0x09;              break;          case 'a':          case 'A':              ucTmp = 0x0a;              break;          case 'b':          case 'B':              ucTmp = 0x0b;              break;          case 'c':          case 'C':              ucTmp = 0x0c;              break;          case 'd':          case 'D':              ucTmp = 0x0d;              break;          case 'e':          case 'E':              ucTmp = 0x0e;              break;          case 'f':          case 'F':              ucTmp = 0x0f;              break;          default:              printf("err char!\n");              return -1;          }          return ucTmp;      }            uint8 GetOneChar(uint8 *pucBuf)      {          uint8 ucChar = 0x00;          if(NULL == pucBuf)          {              printf("para is NULL!\n");              return -1;          }                ucChar = ConverseOneChar(pucBuf[0]);        //  printf("first ucChar= 0x%x\n", (char)ucChar);          ucChar <<= 4;          ucChar |= ConverseOneChar(pucBuf[1]);         // printf("second ucChar= %c[0x%x]\n", (char)ucChar, ucChar);                return ucChar;      }            int SkipDelimiter(uint8 *pcBuf)      {          int n = 0;          char *pcBufTmp = (char *)pcBuf;                    for(n = 0; (pcBufTmp[n] != '\0') && (pcBufTmp[n] != '\n') && (pcBufTmp[n] != '\r'); n++)          {              if ((pcBufTmp[n] == '0')                  || (pcBufTmp[n] == '1')                  || (pcBufTmp[n] == '2')                  || (pcBufTmp[n] == '3')                  || (pcBufTmp[n] == '4')                  || (pcBufTmp[n] == '5')                  || (pcBufTmp[n] == '6')                  || (pcBufTmp[n] == '7')                  || (pcBufTmp[n] == '8')                  || (pcBufTmp[n] == '9')                  || (pcBufTmp[n] == 'A') || (pcBufTmp[n] == 'a')                  || (pcBufTmp[n] == 'B') || (pcBufTmp[n] == 'b')                  || (pcBufTmp[n] == 'C') || (pcBufTmp[n] == 'c')                  || (pcBufTmp[n] == 'D') || (pcBufTmp[n] == 'd')                  || (pcBufTmp[n] == 'E') || (pcBufTmp[n] == 'e')                  || (pcBufTmp[n] == 'F') || (pcBufTmp[n] == 'f'))              {                  break;              }          }                return n;      }            int ParseHexString(unsigned char *pucSrcBuf, int iSrcFileLen, unsigned char *pucDstBuf)      {          uint8 *pucSrcTmp = NULL;          uint8 *pucDstTmp = NULL;          uint8 ucTmp = 0;          int iFileLenRemain = iSrcFileLen;          int iDelimiterNum = 0;          int n = 0;                if((NULL == pucSrcBuf)||(NULL == pucSrcBuf))          {              printf("para 1 or 2 is NULL!\n");              return -1;          }          pucSrcTmp = pucSrcBuf;          pucDstTmp = pucDstBuf;                      while(iFileLenRemain != 0)          {              ucTmp = GetOneChar(pucSrcTmp);             // printf("ucTmp = %c\n", (char)ucTmp);              pucDstTmp[n++] = ucTmp;                    pucSrcTmp += 2;              iDelimiterNum = SkipDelimiter(pucSrcTmp);            //  printf("iDelimiterNum=%d\n", iDelimiterNum);              pucSrcTmp += iDelimiterNum;              iFileLenRemain -= 2 + iDelimiterNum;          }                return n;      }            char * numtoascii(char * string){           int iRet = 0;          char *pcFileForChange = NULL;                 int iDstFd = 0;          int iSrcFileLen = 0;          int n = 0;          unsigned char *pucSrcBuf = NULL;          unsigned char *pucDstBuf = NULL;               iSrcFileLen=strlen(string);                      iDstFd = open("Cstring.txt", O_RDWR | O_CREAT | O_TRUNC, 0644);          if (iDstFd < 0)          {              printf("open change filename file faild!\n");              exit(0);          }                       //  printf("FileLen:%d\n", iSrcFileLen);                  pucSrcBuf = malloc(iSrcFileLen + 1024);          pucDstBuf = malloc(iSrcFileLen);          memset(pucSrcBuf, 0, iSrcFileLen);          memset(pucDstBuf, 0, iSrcFileLen);                pucSrcBuf=string;              // printf("read:%s\n", pucSrcBuf);                n = ParseHexString(pucSrcBuf, iSrcFileLen, pucDstBuf);         // printf("write:\n%s\n", pucDstBuf);                iRet = write(iDstFd, pucDstBuf, n);          if(iRet != n)          {              printf("write err, write len = %d\n", iRet);              exit(0);          }                         close(iDstFd);                  return pucDstBuf;                    }      


0 0
原创粉丝点击