16进制数据流转换成C语言数组

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

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

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

// FileNameToArray.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <iostream>

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;
}
时间: 2024-12-25 00:11:45

16进制数据流转换成C语言数组的相关文章

iOS 将16进制字符串转换成UIColor

#pragma mark - 将16进制字符串转换成 UIColor - (UIColor *)generateColorObjectWithHex:(NSString *)hexString { unsigned int red = 0, green = 0, blue = 0; NSRange range = {0, 2}; range.location = 0; NSString *redString = [hexString substringWithRange:range]; NSSc

将16进制字符串转换成16进制数据

var tb1 = Tb1.Text; if (string.IsNullOrEmpty(tb1)) { tb1 = "0000"; } var s1 = tb1.Substring(0, 2); var int_1 = Convert.ToInt32(s1, 16); var s2 = tb1.Substring(2, 2); var int_2 = Convert.ToInt32(s2, 16); var bt1 = Convert.ToByte(int_1); var bt2 =

iOS 16进制字符串转换成int十进制

NSRange rangeErr; rangeErr.location = 6; rangeErr.length = 2; NSString *strings = [value substringWithRange:rangeErr]; int errCode = (int)strtoul([strings UTF8String],0,16);  //16进制字符串转换成int NSString *ascStr = [NSString stringWithFormat:@"%c",re

C#中将以0x开头的16进制字符串转换成对应的整数

有两种方法: 1. 要转换成有符号整数,使用 Convert.ToInt32(string, 16) : 要转换成无符号整数,使用 Convert.ToUInt32(string, 16) . 如果 16 进制的字符串不是以 0x 或 0X 开头,比如"af37",用这种方法也能进行转换. 2. 要转换成有符号整数,使用 new System.ComponentModel.Int32Converter().ConvertFromString(string) : 要转换成无符号整数,使用

C# 解析16进制字符串。将16进制字符串转换成明文字符串

将诸如 字符串 “73 6F 75 6E 64 34 2F 64 65 6D 6F 31 32 38 2E 6D 70 33 00” 转换成明文的方法 方法定义: private static string HexStringToString(string hexString, Encoding encoding = null) { if (string.IsNullOrEmpty(hexString)) return string.Empty; if (encoding == null) en

字节流、字符串、16进制字符串转换__Java(转)

Java代码   /** * @Package: * @ClassName:TypeConversion * @Description:字节流.字符串.16进制字符串转换 * @author:xk * @date:Jan 8, 2013 5:00:08 PM */ public class TypeConversion { /** * @Title:bytes2HexString * @Description:字节数组转16进制字符串 * @param b *            字节数组 *

ColorUtil【Color工具类(color整型、rgb数组、16进制互相转换)】

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 主要用于color整型.rgb数组.16进制互相转换(-12590395 <--> #3FE2C5 <--> [63,226,197]) 效果图 暂不需要 代码分析 color的int类型值转16进制类型值包括两种方案: 方案一:思路:计算&16777215的值,然后通过字符串获取16进制数值. /**Color的Int整型转Color的16进制颜色值[方案一] * colorInt - -12590395 * r

iOS开发时间戳与时间NSDate,时区的转换,汉字与UTF8,16进制的转换

http://blog.sina.com.cn/s/blog_68661bd80101njdo.html 标签: ios时间戳 ios开发时间戳 ios16进制转中文 ios开发utf8转中文 ios汉字转utf8和16进   //获取当前系统的时间戳+(long)getTimeSp{    long time;    NSDate *fromdate=[NSDate date];    time=(long)[fromdate timeIntervalSince1970];    return

C# Socket发送接收字节数组和十六16进制之间转换函数

近期在使用远程网络模块的时候, 需要用的Socket发送数据,远程模块指令为16进制. 官方提供的DEMO比较繁琐.不方便新手使用. 下面的转换函数可大大方便新手使用. // 16进制字符串转字节数组 格式为 string sendMessage = "00 01 00 00 00 06 FF 05 00 64 00 00"; private static byte[] HexStrTobyte(string hexString) { hexString = hexString.Rep