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
- 16进制转ascii接口
- 16进制转ascii
- ASCII 转16进制 和 16进制转ASCII
- Guava-base接口|Ascii|CharMatcher
- 简单的16进制转Ascii码
- 16转ascii
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- ASCII
- Zend Framework 2 入门-视图(View)
- USACO Section 2.1 The Castle
- 用iptables做端口映射
- Coin test
- 【转】TFT液晶简介
- 16进制转ascii接口
- sql语句
- minicom无法输入问题
- Android 内存溢出解决方案(OOM)整理总结
- 在UIAlertView上面添加输入框
- auto_ptr
- android当选中和获得焦点的区别
- ClickOnce 部署 API 按需下载程序集
- 隐式马尔可夫链