1.读取Hex文件
void CTestProjectDlg::OnBnClickedButtonReadHex()
{
CString filename = _T("");
CFileDialog Open(TRUE, _T("*.hex"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("Hex Files (*.hex)|*.hex|All Files (*.*)|*.*||"), NULL);
if (Open.DoModal() == IDOK)
{
filename = Open.GetPathName();
}
CFile m_file;
m_file.Open(filename, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeRead);
int nlen = (int)m_file.GetLength();//文件的长度
unsigned char *m_BigDataBuf;
m_BigDataBuf = (unsigned char*)malloc(nlen);
m_file.SeekToBegin();
m_file.Read(m_BigDataBuf, nlen);
m_file.Close();
yangsen.clear();
UINT nTotalSum = InCheckSum8(m_BigDataBuf, nlen);
UINT nTotalSum = InCheckSum8(m_BigDataBuf, nlen-2);//就代表最后两个数不加
}
还有求和函数
UINT CTestProjectDlg::InCheckSum8(unsigned char* addr, int len)
{
UINT sum = 0;
while (len > 0)
{
int nTemp=(*addr);
yangsen.push_back(nTemp);
sum = sum + *addr;
addr += 1;
len -= 1;
}
//计算从后往前累加,看累加到哪个值之后总和的后2个字节值等于42759
// addr += len-1;
// while (len > 0)
// {
// sum = sum + *addr;
// unsigned short ntemp = (unsigned short)sum;
// if (ntemp == 42759)
// {
// return len;
// }
// addr -= 1;
// len -= 1;
// }
return sum;
}