c语言 16进制转字节流,16进制数据流转换成C语言数组

在开发中经常遇到以下情况,通过一些工具捕获的16进制数据,应用到代码中,比如通过Wireshark抓获的数据包,观察到的程序内存数据。

e7dbd6cfaf85e6dfaa9ee0dd6d4c384d.png

但是在开发时,不能直接使用这些数据,需要转换如下样子,才可以在代码中使用:

41caa36607662aee40fff5a46c650615.png

我写了一个小工具,可以将二进制数据流转换成数组,代码如下:

// 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值