16进制转ascii

604 篇文章 8 订阅
579 篇文章 5 订阅
    #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");  
            return -1;  
        }  
      
         
        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);  
            return -1;  
        }  
      
         
        close(iDstFd);  
        
        return "ok";
     	
     	
     	
     	}
      
    int main(int argc, char **argv)  
    {  
       /* int iRet = 0;  
        char *pcFileForChange = NULL;  
        int iSrcFd = 0;  
        int iDstFd = 0;  
        int iSrcFileLen = 0;  
        int n = 0;  
        unsigned char *pucSrcBuf = NULL;  
        unsigned char *pucDstBuf = NULL;  
      
        if(argc != 2)  
        {  
            printf("you need input the filename to change!\n");  
            return -1;  
        }  
      
        pcFileForChange = argv[1];  
        printf("filename:%s\n", pcFileForChange);  
        iSrcFd = open(pcFileForChange, O_RDONLY);  
        if (iSrcFd < 0)  
        {  
            printf("open file:[%s] faild!\n", pcFileForChange);  
            return -1;  
        }  
        iDstFd = open("Cstring.txt", O_RDWR | O_CREAT | O_TRUNC, 0644);  
        if (iDstFd < 0)  
        {  
            printf("open change filename file faild!\n");  
            return -1;  
        }  
      
        iSrcFileLen = lseek(iSrcFd, 0, SEEK_END);  
        printf("FileLen:%d\n", iSrcFileLen);  
        lseek(iSrcFd, 0, SEEK_SET);  
        pucSrcBuf = malloc(iSrcFileLen + 1024);  
        pucDstBuf = malloc(iSrcFileLen);  
        memset(pucSrcBuf, 0, iSrcFileLen);  
        memset(pucDstBuf, 0, iSrcFileLen);  
      
        iRet = read(iSrcFd, pucSrcBuf, iSrcFileLen);  
        if(iRet != iSrcFileLen)  
        {  
            printf("read err, read len = %d\n", iRet);  
            return -1;  
        }  
        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);  
            return -1;  
        }  
      
        close(iSrcFd);  
        close(iDstFd);  
      
      */
        return 0;  
        
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值