打包hex文件

来源:互联网 发布:网络免费卫星电视直播 编辑:程序博客网 时间:2024/06/16 03:44

我的想法是写个MFC程序,让用户输入 打包的文件,和打包后保存的文件,打包的版本信息,名称,文件大小等等

//建立一个线程

dealThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)deal_function,this,0,&dealThreadid);

 

CpackagHEXDlg *p=(CpackagHEXDlg *)lpParm;
   // p->p_dealthread();
 //return true;

 CString packagefile;
 CString savefile;
 CString xyh_version;
 CString filename;
 int i;
 int j=0;
 int filesize;
 CStdioFile myFile;
 CFileException fileException;
 //int size = 2*1024*1024;
 char *scr_buf = new char[SIZE_BUF];
 //char *des_buf = new char[SIZE_BUF];
 char des_temp[50]={0};
 char jiaru_temp[50]={0};
 //char* temp_p=NULL;
 //char* temp_q=NULL;
 //从界面取得版本,名字信息
 p->m_pre_hex_name.GetWindowText(packagefile);
 p->m_last_hex_name.GetWindowText(savefile);
 p->m_version.GetWindowText(xyh_version);
 if(xyh_version.GetLength()!=4)
 {
  p->MessageBox(L"版本信息格式错误!");
  kk=0;
  return -1;
 }
 
 p->m_filename.GetWindowText(filename);
 
 if(filename.GetLength()>16)
 {
  p->MessageBox(L"名称字数过多!");
  kk=0;
  return -1;
 }
 
 memset(scr_buf,0,sizeof(scr_buf));
 
 if(myFile.Open(packagefile, CFile::typeBinary|CFile::modeRead,&fileException))
 {
  UINT res=-1;
  res = myFile.Read(scr_buf,SIZE_BUF);
  if(!res)
  {
   p->MessageBox(_T("读文件操作失败!"));
   delete[] scr_buf;
   //delete[] des_buf;
   kk=0;
   return FALSE;
  }
  scr_buf[res]='\0';
  myFile.Close();
 }
 else{
  p->MessageBox(_T("打开读文件失败!"));
  delete[] scr_buf;
  //delete[] des_buf;
  kk=0;
  return FALSE;
 }
 filesize = strlen(scr_buf);

 if(myFile.Open(savefile, CFile::modeCreate|CFile::typeBinary|CFile::modeWrite,&fileException))
 {
  //把版本写入目标buf中
  memset(jiaru_temp,0,sizeof(jiaru_temp));
  memset(des_temp,0, sizeof(des_temp));
  WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,xyh_version.GetBuffer(xyh_version.GetLength()),xyh_version.GetLength(),jiaru_temp,xyh_version.GetLength(),NULL,NULL);
  sprintf(des_temp,":F0%02x%02x%02x%02x\r\n",jiaru_temp[0],jiaru_temp[1],jiaru_temp[2],jiaru_temp[3]); //转化成hex格式文件保存进文件
     myFile.Write(des_temp,strlen(des_temp));
  //把名字写入文件间中
  memset(jiaru_temp,0,sizeof(jiaru_temp));
  memset(des_temp,0, sizeof(des_temp));
  WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,filename.GetBuffer(filename.GetLength()),filename.GetLength(),jiaru_temp,filename.GetLength(),NULL,NULL);
  myFile.Write(":F1",3);
  for(i=0; ;i++)
  {
   memset(des_temp,0, sizeof(des_temp));
   if(jiaru_temp[i]=='\0') break;
   sprintf(des_temp,"%02x",jiaru_temp[i]);
   myFile.Write(des_temp,strlen(des_temp));
  }
  myFile.Write("\r\n",2);
  //把文件大小写到目标文件中区
  memset(jiaru_temp,0,sizeof(jiaru_temp));
  memset(des_temp,0, sizeof(des_temp));
  sprintf(jiaru_temp,"%d",filesize);
  //sprintf(des_temp,":F2%02x%02x%02x%02x\r\n",jiaru_temp[0],jiaru_temp[1],jiaru_temp[2],jiaru_temp[3]);
  //myFile.Write(des_temp,strlen(des_temp));
  myFile.Write(":F2",3);
  for(i=0; ;i++)
  {
   memset(des_temp,0, sizeof(des_temp));
   if(jiaru_temp[i]=='\0') break;
   sprintf(des_temp,"%02x",jiaru_temp[i]);
   myFile.Write(des_temp,strlen(des_temp));
  }
  myFile.Write("\r\n",2);

  myFile.Write(scr_buf,strlen(scr_buf));
  
  myFile.Close();
 }
 else{
  p->MessageBox(_T("打开写文件失败!"));
  //delete[] des_buf;
  delete[] scr_buf;
  kk=0;
  return FALSE;
 }

 p->MessageBox(L"打包文件成功!");
 //delete[] des_buf;
 delete[] scr_buf;
 kk=0;

 return TRUE;





 

原创粉丝点击