将16进制文本转换为ascii码的C语言代码
来源:互联网 发布:网页版windows系统 编辑:程序博客网 时间:2024/05/21 11:11
我用的将16进制文本转换为ascii码的C语言代码。16进制文本复制到文件test.txt中,运行程序,将得到输入。
例:
运行:./CSTRING test.txt
其中,test.txt文件内容为:
30:31:32
则得到的"Cstring.txt"输入文件中
012
本程序能自动跳过0个或多个分隔符(分隔符可以为任意的符号,如“:”,“%”或空格等,判断的函数实现见SkipDelimiter函数)。
如:输入文件内容为:
30 31 32
或
303132
得到的都是
012
#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;}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;}
- 将16进制文本转换为ascii码的C语言代码
- Linux c 源码(nMAsciiHexToBinary:将16进制字符串格式转换为ASCII码形式)
- 如何将LabVIEW的VI转换为C语言代码
- C语言将16进制的数转换为字符串的方法
- C语言将16进制的数转换为字符串的方法(改进)
- c语言将十进制数转换为16进制的函数
- c语言将十进制数转换为16进制的函数
- 读写二进制时,怎么将ASCII码大于等于128的char字符转换为16进制输出
- 数制转换,将10进制转换为8进制 C语言 栈的应用
- 如何将C语言代码转换为对应的汇编代码?
- 将String转换为ascii码
- 将AL的低四位表达的一位16进制数转换为ASCII码
- 将16进制的数按字符格式存储,转换为10进制数输出-C语言
- 将整型的ASCii码值转换为对应的ASCii码字符串
- 将16进制Ascii码转换为string类型的电脑按键字符
- C#--第2周实验--将读入的字符转换为整数(ASCII)输出,并看看小写字母与大写字母A的ASCII码是多少
- 将Unicode转换为ASCII
- 将8进制字符串转换为整数的代码
- 网络安全热门资料 精品工具——下载目录(转)
- linux 与 windows 双系统之间文件共享
- [Android实例] android定制化开关机动画、铃音
- Android获取本机IP地址(不是localhost)和MAC的方法
- [2月7日的脚本] 在Windows 8开始屏幕上修改背景颜色
- 将16进制文本转换为ascii码的C语言代码
- 笔试题二
- Python 运算符与表达式
- 音视频即时通讯开发中使用P2P技术的好处
- 【J2ME资料汇总】48个推荐资料+40个经典源码(转)
- MySQL 当记录不存在时插入,当记录存在时更新
- 动态规划--矩阵连乘问题
- Linux伙伴系统分配器
- 添加163的源到ubuntu的source list