工作需要,现在需要一个能够计算文件CheckSum的工具

要求:

   1。能够计算bin、hex和mot文件。

   2。结果为8位的CheckSum。

   首先处理bin文件,这个文件格式最简单,纯粹的二进制数据,不涉及到地址信息,所以只需要将其

从头到尾加起来就行了。

   wKiom1LHatXzl0j_AAImxkusqAI866.jpg

   需要注意的地方是如果Flash的大小为4MB,bin的实际大小只有3MB大小,剩下的1MB大小的空间填

充的不是00而是FF。

   设计思想就是首先开辟指定大小空间的数组,全部填充为0xFF,再将bin文件读入的数据放入数组

中,这样使得最后数组中的数据就为实际的Flash中的数据。

   再计算该数组的CheckSum即可。

void CCheckSum8BitDlg::OnCheckSum()
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    CFile fileRead;
    CString checkSum = "";
    int check_sum_result = 0;
    int nFileLen = 0;
    unsigned int i = 0;
    unsigned char *data = new unsigned char[FlashSize];
    memset(data,0xFF,FlashSize);
    fileRead.Open(inSrc, CFile::modeRead);
    nFileLen = fileRead.GetLength();
    fileRead.Read(data,nFileLen);
    for(i = 0; i < FlashSize; i++)
    {
        check_sum_result += data[i];
    }
    checkSum.Format("%0x",check_sum_result);
    SetDlgItemText(IDC_EDIT2,checkSum);
    delete(data);
    fileRead.Close();
}

wKiom1LHbPbzTUbQAAA3HXb5_44774.jpg