64,648
社区成员
发帖
与我相关
我的任务
分享
/*----------------------------------------------------------------
【函数介绍】: 将ASCII码转化成十六进制表示
【入口参数】: buf ascii码字符串
len 字符串buf的长度
【返回 值】: 返回对应的十六进制的值
【出口参数】: (无)
-----------------------------------------------------------------*/
char* CTCPClient_CE::ascii2hex(char* chs,int len)
{
//用于接收到的串转换成要用的十六进制串返回主窗口调用
char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F'};
char *ascii = (char*)calloc ( len * 3 + 1, sizeof(char) );// calloc ascii
int i = 0;
while( i < len )
{
int b= chs[i] & 0x000000ff;
ascii[i*2] = hex[b/16] ;
ascii[i*2+1] = hex[b%16] ;
++i;
}
return ascii; // ascii 返回之前未释放
}
第二个问题 我理解的是 比如是int型的数字转化成十六进制?
先使用sprintf把int转化为ASCII码,然后再通过上面的函数转化为16进制的ASC码表示#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
unsigned int n;
int c;
//-------------------------------------------------------
void main(int argc,char *argv[])
{
if (argc<3) {
cprintf("Bin2Hex srcfile desfile");
return;
}
if ((fi=fopen(argv[1],"rb"))==NULL) {
cprintf("Can not find file %s",argv[1]);
return;
}
if ((fo=fopen(argv[2],"w"))==NULL) {
fclose(fi);
cprintf("Can not create file %s",argv[2]);
return;
}
n=0;
while (1) {
c=fgetc(fi);
if (EOF==c) break;
n++;
if (1==n) fprintf(fo, "0x%02X",c);
else {
if (1==n%16) fprintf(fo,"\n0x%02X",c);
else fprintf(fo, ",0x%02X",c);
}
}
fcloseall();
cprintf("OK to Bin2Hex %u bytes.",n);
}