此程序功能:
假如: unsigned char *szBuf = "1234567890 ";
那么使用此程序后:
unsigned char *szBuf ="\x12\x34\x56\x78"; //即成员是 0x12, 0x34, 0x56, 0x78,0x90。
请大家支持一下我的商城: http://www.yangcheng520.com/goods.php?id=14604
使用VC6.0即可编译:
VCMake.bat:
编译成功后既可以运行。要自己建立两个文件:"ASC_IN" 和 "HEX_OUT"。
ASC_IN放入一串字符,0~9,a~f 即可。
阅读(494) | 评论(1) | 转发(0) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
假如: unsigned char *szBuf = "1234567890 ";
那么使用此程序后:
unsigned char *szBuf ="\x12\x34\x56\x78"; //即成员是 0x12, 0x34, 0x56, 0x78,0x90。
请大家支持一下我的商城: http://www.yangcheng520.com/goods.php?id=14604
点击(此处)折叠或打开
- #include <stdio.h>
- #include <string.h>
- #include <fcntl.h>
-
- #define APP_SUCC 0
- #define APP_FAIL -1
-
- #define MAX_NUM 8000
-
- /******************************************************************************
- * 函数名称:PubAscToHex
- * 函数介绍:将AscII码的字符串转换成压缩的HEX格式
- * 函数描述:非偶数长度的字符串根据对齐方式,采取左补0,右补F方式
- * 入口参数:pszAsciiBuf ---- 被转换的ASCII字符串
- * nLen ---- 输入数据长度(ASCII字符串的长度)
- * cType ---- 对齐方式 0-左对齐 1-右对齐
- * 出口参数:pszBcdBuf ---- 转换输出的HEX数据
- * 返 回 值:APP_SUCC 0 成功; APP_FAIL -1 失败
- * 修改日期:2006-09-11
- *******************************************************************************/
- int PubAscToHex (const unsigned char* pszAsciiBuf, int nLen, char cType, unsigned char* pszBcdBuf)
- {
- int i = 0;
- char cTmp, cTmp1;
-
- if (pszAsciiBuf == NULL)
- {
- return APP_FAIL;
- }
-
- if (nLen & 0x01 && cType)/*判别是否为奇数以及往那边对齐*/
- {
- cTmp1 = 0 ;
- }
- else
- {
- cTmp1 = 0x55 ;
- }
-
- for (i = 0; i < nLen; pszAsciiBuf ++, i ++)
- {
- if ( *pszAsciiBuf >= 'a' )
- {
- cTmp = *pszAsciiBuf - 'a' + 10 ;
- }
- else if ( *pszAsciiBuf >= 'A' )
- {
- cTmp = *pszAsciiBuf - 'A' + 10 ;
- }
- else if ( *pszAsciiBuf >= '0' )
- {
- cTmp = *pszAsciiBuf - '0' ;
- }
- else
- {
- cTmp = *pszAsciiBuf;
- cTmp&=0x0f;
- }
-
- if ( cTmp1 == 0x55 )
- {
- cTmp1 = cTmp;
- }
- else
- {
- *pszBcdBuf ++ = cTmp1 << 4 | cTmp;
- cTmp1 = 0x55;
- }
- }
- if (cTmp1 != 0x55)
- {
- *pszBcdBuf = cTmp1 << 4;
- }
-
- return APP_SUCC;
- }
-
- int PubDispData(const unsigned char *data, int len)
- {
- int i = 0;
- int j = 1;
- for(i = 0; i < len; i++)
- {
- if(data[i] <= 9)
- {
- printf("%02x ", data[i]);
- }
- else
- {
- printf("%02x ", data[i]);
- }
- if(i == (8*j-1))
- {
- printf("\n");
- j++;
- }
-
- }
- printf("\n");
- return 0;
- }
-
- int main(int argc, char *argv[])
- {
- int i, j;
- int len, rec;
- int nENnum = 0;
- int recTmp = 0;
- char *asc_in = "ASC_IN";
- char *hex_out = "HEX_OUT";
- FILE *out;
- unsigned char in_str[128];
- unsigned char szTmpBuf[MAX_NUM];
- unsigned char szHexbuf[MAX_NUM];
- unsigned char szAscbuf[MAX_NUM];
-
- memset(in_str, 0, 128);
- memset(szAscbuf, 0, sizeof(szAscbuf));
- memset(szHexbuf, 0, sizeof(szHexbuf));
- rec = 0;
- len = MAX_NUM+1;
- out = fopen(asc_in, "rb");
- if(out != NULL){
- printf("成功打开了 ASC_IN文件\n");
- }
- else{
- printf("打开文件出错!");
- getch();
- return -1;
- }
- rec = fread(szAscbuf, sizeof(unsigned char), len, out);
- printf("读出的字符串长度: %d\n", rec);
- //PubDispData(szAscbuf, rec);
- if(rec >= len){
- printf("读出的字符串长度大于8k!\n");
- fclose(out);
- getch();
- return APP_FAIL;
- }
- if(rec == 0){
- printf("ASC_IN文件没有数据!\n");
- fclose(out);
- getch();
- return APP_FAIL;
- }
- fclose(out);
-
- memcpy(szTmpBuf, szAscbuf, rec);
- recTmp = rec;
- j = 0;
- for(i = 0; i < recTmp; i++)
- {
- if(szTmpBuf[i] == 0x0D && szTmpBuf[i+1] == 0x0A)
- {
- rec -= 2;
- nENnum++;
- i++;
- continue;
- }
- else{
- szAscbuf[j] = szTmpBuf[i];
- j++;
- }
- }
- printf("去点回车字节个数:%d,包含%d个字节\n", nENnum, nENnum*2);
- printf("去点回车字节后长度:%d", rec);
- len = rec;
- PubAscToHex(szAscbuf, len, 0, szHexbuf);
-
- out = fopen(hex_out, "wb");
- fwrite(szHexbuf, sizeof(unsigned char), (len/2+len%2), out);
- fclose(out);
- /*
- out = fopen("Test", "r+");
- fread(in_str, sizeof(unsigned char), len, out);
- for(i = 0; i < len; i++)
- printf("%x ", in_str[i]);
- fclose(out);*/
- printf("\n");
- getch();
-
- /*
- {
- memset(in_str, 0, 128);
- int fd;
- fd = open("PText", O_CREAT|O_RDWR, 0666);
- write(fd, string, len);
- close(fd);
-
- fd = open("PText", O_RDWR);
- read(fd, in_str, len);
- for(i = 0; i < len; i++)
- printf("%x ", in_str[i]);
- close(fd);
- printf("\n");
- }
-
- {
- out = fopen("TTest", "w+");
- for(i = 0; i < len; i++){
- fprintf(out, "0x%x ", string[i]);
- }
- fclose(out);
-
- memset(in_str, 0, 128);
- out = fopen("TTest", "r+");
- for(i = 0; i < len; i++){
- fscanf(out, "%x", &in_str[i]);
- }
- for(i = 0; i < len; i++)
- printf("%x ", in_str[i]);
- fclose(out);
- printf("\n");
- }
- */
- return 0;
- }
VCMake.bat:
点击(此处)折叠或打开
- set VCBIN=D:\Microsoft Visual Studio\VC98\Bin
- set INCLUDE=D:\Microsoft Visual Studio\VC98\Include
- set LIB=D:\Microsoft Visual Studio\VC98\Lib
- set PATH=%VCBIN%
- cl *.c
- pause
ASC_IN放入一串字符,0~9,a~f 即可。
相关热门文章
给主人留下些什么吧!~~
评论热议