Hex文件转换Bin文件——VC代码
来源:互联网 发布:java连接ssh上传文件 编辑:程序博客网 时间:2024/06/06 13:24
原文地址::http://flying-in-rain.blog.163.com/blog/static/1318685942009102564347569/
(2009-08-27)
//FuncCode.h
#i nclude "stdafx.h"
int HexToBin(char* pHex,BYTE* pBin);
//Hex转换Bin文件
//pHex: *.Hex文件的内容
//pBin: 存放数据的缓冲
//返回值:数据块字节数
BOOL CharToByte(char* pChar,BYTE* pByte);
//两个字符转换成1个字节,例如"af"->0xaf
//pChar:2字符
//pByte:1字节
//返回值:TRUE表示转换成功
//FuncCode.cpp
#i nclude "FuncCode.h"
#i nclude "StdAfx.h"
int HexToBin(char* pHex,BYTE* pBin)//pBin指向的缓存必须不小于64k
{
//pHex指向的缓存必须以0结尾
CString strHex;
CArray<BYTE,BYTE>* pByteArray=NULL;
CArray<CArray<BYTE,BYTE>*,CArray<BYTE,BYTE>*> arByteRec;
strHex=pHex;
int nEnd;
BYTE byteTmp;
int n=0,m=0;
nEnd=strHex.Find(":00000001");
if(nEnd<0)//先判断文件结尾处
{
AfxMessageBox("*.Hex文件转换失败(未找到\":00000001\"记录)!");
return -1;
}
while(n<nEnd)//先把所有字符转换成字节
{
if(pHex[n]==':')//发现':'就新增一条记录
{
pByteArray=new CArray<BYTE,BYTE>;
arByteRec.Add(pByteArray);//增加一条记录
n ;
}
else if(pHex[n]==0x0d)//检查是不是换行
{
n ;
}
else if(pHex[n]==0x0a)
{
n ;
}
else//字符转换成字节
{
if(CharToByte(&pHex[n],&byteTmp))
{
if(pByteArray==NULL)
return -1;
pByteArray->Add(byteTmp);//增加一个字节
n ;
n ;
}
else
{
AfxMessageBox("*.Hex文件转换失败(错误的字符)!");
return -1;
}
}
}
int nRec=arByteRec.GetSize();
int nAddr=0;//buf中的偏移地址
BYTE* pBuf;
int nLength=0;//数据块长度
int nByte=0;
memset(pBin,0xff,0xffff);//先把每个单元置成FFH
for(n=0;n<=nRec;n )//分析每条记录
{
pByteArray=arByteRec.GetAt(n);
if(pByteArray->GetSize()<5)
{
AfxMessageBox("*.Hex文件转换失败(错误的记录)!");
return -1;
}
if(pByteArray->GetAt(3)==0)//判断是不是数据记录
{
nByte=(int)pByteArray->GetAt(0);
if(nByte>(pByteArray->GetSize()-4))//记录中数据长度不符合
{
AfxMessageBox("*.Hex文件转换失败(错误的记录)!");
return -1;
}
((BYTE*)&nAddr)[0]=pByteArray->GetAt(2);//装入地址
((BYTE*)&nAddr)[1]=pByteArray->GetAt(1);
pBuf=&pBin[nAddr];
for(m=0;m<=nByte;m )//把数据都拷贝到pBin
{
pBuf[m]=pByteArray->GetAt(4 m);
nLength ;
}
}
else if(pByteArray->GetAt(3)==2)
{
AfxMessageBox("*.Hex文件转换失败(不支持大于64k)!");
return -1;
}
else if(pByteArray->GetAt(3)==4)
{
AfxMessageBox("*.Hex文件转换失败(不支持大于64k)!");
return -1;
}
else
{
AfxMessageBox("*.Hex文件转换失败(错误的记录)!");
return -1;
}
}
return nLength;
}
BOOL CharToByte(char* pChar,BYTE* pByte)
{
char h,l;
h=pChar[0];//高4位
l=pChar[1];//低4位
if(l>='0'&&l<='9')
l=l-'0';
else if(l>='a' && l<='f')
l=l-'a' 0xa;
else if(l>='A' && l<='F')
l=l-'A' 0xa;
else
return FALSE;
if(h>='0'&&h<='9')
h=h-'0';
else if(h>='a' && h<='f')
h=h-'a' 0xa;
else if(h>='A' &&h <='F')
h=h-'A' 0xa;
else
return FALSE;
*pByte=(BYTE)h*16 l;
TRACE("BYTE:x\n",*pByte);
return TRUE
}
- Hex文件转换Bin文件——VC代码
- hex文件快速转换为bin文件
- HEX文件和BIN文件总结及hex文件流转bin文件流示例代码
- HEX文件和BIN文件总结及hex文件流转bin文件流示例代码
- HEX文件和BIN文件总结及hex文件流转bin文件流示例代码
- 一个hex文件与bin文件相互转换的python代码
- bin文件转换为hex文件C语言实现
- hex文件转换为bin文件C语言实现
- HEX文件和BIN文件
- Hex文件转Bin文件
- Hex文件转Bin文件
- Hex文件转Bin文件
- axf、elf文件转换成bin、hex脚本工具
- HEX BIN文件 分析介绍
- HEX转BIN文件总结
- HEX 文件和bin文件区别
- C# Hex文件转Bin文件
- HEX文件与BIN文件简介
- Shell脚本编程——监控系统内存之free
- java math类有哪些常用方法
- uva 1344 Tian Ji -- The Horse Racing
- linux内核之block层函数调用图
- poj 2337 欧拉回路
- Hex文件转换Bin文件——VC代码
- 1002
- 数据结构 学习笔记之:关于顺序栈中给结构体类型指针分配内存时,使用malloc和不使用malloc的疑惑之解惑!
- 1005
- 飞凌OK6410之触摸屏的学习
- 多寄存器寻址指令ldmia/ldmib和ARM存储器访问指令——多寄存器存取
- drp的笔记1
- 1006
- myeclipse 配置svn插件