?? funccode.cpp
字號:
#include "FuncCode.h"
#include "StdAfx.h"
int HexToBin(char* pHex,BYTE* pBin)//pBin指向的緩存必須不小于64k
{ //pHex指向的緩存必須以0結(jié)尾
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)//先判斷文件結(jié)尾處
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(未找到\":00000001\"記錄)!");
return -1;
}
while(n<nEnd)//先把所有字符轉(zhuǎn)換成字節(jié)
{
if(pHex[n]==':')//發(fā)現(xiàn)':'就新增一條記錄
{
pByteArray=new CArray<BYTE,BYTE>;
arByteRec.Add(pByteArray);//增加一條記錄
n++;
}
else if(pHex[n]==0x0d)//檢查是不是換行
{
n++;
}
else if(pHex[n]==0x0a)
{
n++;
}
else//字符轉(zhuǎn)換成字節(jié)
{
if(CharToByte(&pHex[n],&byteTmp))
{
if(pByteArray==NULL)
return -1;
pByteArray->Add(byteTmp);//增加一個(gè)字節(jié)
n++;
n++;
}
else
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(錯(cuò)誤的字符)!");
return -1;
}
}
}
int nRec=arByteRec.GetSize();
int nAddr=0;//buf中的偏移地址
BYTE* pBuf;
int nLength=0;//數(shù)據(jù)塊長度
int nByte=0;
memset(pBin,0xff,0xffff);//先把每個(gè)單元置成FFH
for(n=0;n<nRec;n++)//分析每條記錄
{
pByteArray=arByteRec.GetAt(n);
if(pByteArray->GetSize()<5)
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(錯(cuò)誤的記錄)!");
return -1;
}
if(pByteArray->GetAt(3)==0)//判斷是不是數(shù)據(jù)記錄
{
nByte=(int)pByteArray->GetAt(0);
if(nByte>(pByteArray->GetSize()-4))//記錄中數(shù)據(jù)長度不符合
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(錯(cuò)誤的記錄)!");
return -1;
}
((BYTE*)&nAddr)[0]=pByteArray->GetAt(2);//裝入地址
((BYTE*)&nAddr)[1]=pByteArray->GetAt(1);
pBuf=&pBin[nAddr];
for(m=0;m<nByte;m++)//把數(shù)據(jù)都拷貝到pBin
{
pBuf[m]=pByteArray->GetAt(4+m);
nLength++;
}
}
else if(pByteArray->GetAt(3)==2)
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(不支持大于64k)!");
return -1;
}
else if(pByteArray->GetAt(3)==4)
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(不支持大于64k)!");
return -1;
}
else
{
AfxMessageBox("*.Hex文件轉(zhuǎn)換失敗(錯(cuò)誤的記錄)!");
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;
/*l=str.GetAt(1);
h=str.GetAt(0);
TRACE("str:");
TRACE(str);
TRACE("[h]asc:%c vol:%x,[l]asc:%c vol:%x\n",h,h,l,l);*/
*pByte=(BYTE)h*16+l;
TRACE("BYTE:%x\n",*pByte);
return TRUE;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -