16进制转ascii接口

604 篇文章 8 订阅
579 篇文章 5 订阅
 核心思想:将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;
     	
     	
     	
     	}
      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值