在开发中经常遇到以下情况,通过一些工具捕获的16进制数据,应用到代码中,比如通过Wireshark抓获的数据包,观察到的程序内存数据。
但是在开发时,不能直接使用这些数据,需要转换如下样子,才可以在代码中使用:
我写了一个小工具,可以将二进制数据流转换成数组,代码如下:
// FileNameToArray.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
using namespace std;
int Convert(char *szSourceBuf,char *szDestBuf)
{
char *p =szSourceBuf;
while((*p) != '\0')
{
while(*p == ' '|| *p == '\t' ||*p =='\n')
p++;
if(*p !='\0' )
{
char szTemp[10]={0};
sprintf(szTemp,"0x%c%c,",*p,*(p+1));
strcat(szDestBuf,szTemp);
p++;
p++;
}
}
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
char szFileName[100] ={"Binaxxry.txt"};
FILE* f = fopen(szFileName,"+w");
if(f ==NULL)
return 0;
char szSourceBuf[1024]={0};
int nSrcLen = sizeof(szSourceBuf);
char szDestBuf[4096 ] ={0};
int nDstLen = sizeof(szDestBuf);
int nPackageIndex =0;
char szDstFileName[100]={0};
char *p = strchr(szFileName,'.');
*p='\0';
sprintf(szDstFileName,"%s_cArray.txt",szFileName);
FILE *fd =fopen(szDstFileName,"a");
sprintf(szDestBuf,"char szPackage[] ={\n");
fputs(szDestBuf,fd);
while(1)
{
memset(szSourceBuf,0,nSrcLen);
memset(szDestBuf,0,nDstLen);
char*pResult = fgets(szSourceBuf,nSrcLen,f);
if(pResult != 0)
{
Convert(szSourceBuf,szDestBuf);
strcat(szDestBuf,"\n");
fputs(szDestBuf,fd);
}
else
break;
}
fclose(f);
fputs("};",fd);
fclose(fd);
return 0;
}
时间: 10-13