1.文件大小显示为:File Size:XXXM
2.在文件中找:MTK_ROMINFO
  找到到将MTK_ROMINFO后的字符显示为   ROM:...... 
3.在刚才找到的字符串中找mt62显示在CPU后面为mt62xx。
4.将MTK62XX显示为:  CPU:MTK62XX
5.从找到MTK_ROMINFO起256字节内找下一个字符串
显示在[MCU SW]之后。
  找到后在文件后找刚才显示[MCU SW]这后面的字符串,假如后面没有日期的话就继续寻找下一个字符串,直到找到有日期的那个字符串为止。
  在刚才那个有日期的字符串之后有一个BUILD_NO把NO之后的内容(不超过128个字节)显示在build之后。
  找到后在64字节内的 XXXX/XX/XX
  如果找不到XXXX/XX/XX继续找直到找到XXXX/XX/XX或到文件尾
  找到XXXX/XX/XX后显示:BUILD:找到的字符串(不超过 128字节)
6.根据下面的表找语言信息*#0007# Russian(俄语)
*#0030# Greece(希腊)
*#0031# Dutch(荷兰)
*#0033# French(法文)
*#0034# Espana(西班牙语)
*#0036# Hungarian(匈牙利)
*#0039# Italy(意大利)
*#0040# Romanian 罗马尼亚      
*#0043# Austria 奥地利
*#0044# English(英文)
*#0045# Danish 丹麦
*#0048# Polish 波兰      
*#0049# Deutsch 德国
*#0060# Bahasa Melayu(马来语)
*#0062# Bahasa Indonesia(印度尼西亚语)
*#0063# tagalog 菲律宾
*#0066# Thai 泰语
*#0084# Vietnam(越南语) 
*#0086# Chinese 简体中文
*#0090# turkey 土耳其
*#0091# Indo-Iranian 印度
*#0092# Pakistan 巴基斯坦
*#0098# Persian 波斯
*#0351# Portuguese 葡萄牙
*#0386# Slovenian 斯洛文尼亚    
*#0420# Czech 捷克 
*#0421# Slovak 斯洛伐克 
*#0886# Chinese_tw 繁體中文
*#0966# Arabic 阿拉伯
*#0972# Hebrew 以色列经过了很久,还是没有搞定```老是多一点少一点的显示~查*#0086#这些指令``我也只能显示*#0086#而没有显示后面的语言.
下面是部分效果:
CPU: MT6253  
File size: 12 Mb
ROM: GINWAVE53_12832_09A_PCB01_GPRS_MT6253_S00.YH-M60_02_V1-0-004_100809.BIN
BUILD: M09A NONE BF3603 MTKSOC1 YH-M60_02_V1-0-004_100809 GW-MZ10M-V1.0 2010/08/09 15:23
build: 09A GINWAVE53_12832_09A PF38F3050M0Y3DE FGDST7781
[MCU SW] YH-M60_02_V1-0-004_100809
FS(fat) - Start: 0xE00000, Size: 0x200000
### Warning ### File size or MTK_ROMINFO - BAD.
--- Languages --------------
*#0044# |en-US| English
*#0033# |fr-FR| Fran?ais
*#0034# |es-ES| Espa?ol
*#0351# |pt-PT| Português
*#0039# |it-IT| Italiano
*#0049# |de-DE| Deutsch
*#0060# |ms-MY| Bahasa Melayu
*#0062# |id-ID| Bahasa Indonesia
自己询问加自己做出的效果:
File Size: 12 M long. 
ROM: MTK_ROMINFO_v07 GINWAVE53_12832_09A_PCB01_GPRS_MT6253_S00.YH-M60_02_V1-0-004_100809.BIN
CPU: MT6253_S00.YH-M60_02_V1-0-004_100809.BIN 
[MCU SW]: YH-M60_02_V1-0-004_100809.BIN 
TIMER: GW-MZ10M-V1.0 2010/08/09 15:23
LCD driver: GINWAVE53_12832_09A PF38F3050M0Y3DE
build: _NO_OF_ALLOCATION_BITMAP * 8 
English: *#0044# 
繁体中文: #0044# 
简体中文: *#0086# 
~~~有兴趣帮忙的大大直接Q我吧```ID就是,叫我Q~你们也行```

解决方案 »

  1.   

    把字符串全部读到一个字符串中,用strstr查找要找的字符地址,再修改
      

  2.   

    CString CFILEDlg::ReadMTKInfo(CString strfilename)
    {
    DWORD dwsecondLen;
    char szText[0x100]="";              //szText[d]
    char *mtkFlag[11]={"MTK_ROMINFO","MT62","YH-M60_02_","GW-MZ10M",
                  "GINWAVE5","_NO","*#0044#","*#0034#","*#0033#","*#0049#","*#0039#"};     
    CString str1[11]={"ROM: ","CPU: ","[MCU SW]: ","TIMER: ", "LCD driver: ",
                 "build: ","English: ","Espana: ","French: ","Deutsch: ","Italy: "};

    CString mtkversionInfo;
    CFile fOpen;
    // int strncmp( const char *string1, const char *string2, size_t count );
    if(fOpen.Open(strfilename,CFile::modeRead)==NULL)
    return "";
    //得到文件的大小
    DWORD dwLength = fOpen.GetLength();
    CString str;
    str.Format(_T("File Size: %u M long. \n"),dwLength/1024/1024);
    // str.Format("File Size:%u M long.\n",ReadMTKInfo(m_strFileName));
    m_edit1.ReplaceSel(str);
    UpdateData(FALSE);
    // AfxMessageBox(str);
    //内存大小最好设置为动态
    DWORD dwlen=0x1000000;                //开辟一个16M的内存
    char *pbuf=new char[0x1000000];       //NEW出内存指针
    fOpen.Read(pbuf,0x1000000);           //读取文件到特定的PBUF
    fOpen.Close();                        //关闭文件
    for (int i = 0 ; i < 11 ; i ++)
    {
    //查找第几个关键字
    dwsecondLen=CutBuffer(pbuf,dwlen, mtkFlag[i]);
    if (dwsecondLen!=0)
    {
    dwlen=dwlen-dwsecondLen;       //
    pbuf=pbuf+dwsecondLen;         //平移到特定的位置
    memcpy(szText, pbuf,0x100);
    //lstrlen(mtkFlag1)
    //delete pbuf;
    int n=strlen(szText);
    if(n!=0)
    *(szText+n)=0x20;          //把空格付值给*(szText+n)
    mtkversionInfo.Format("%s",szText);
    m_edit1.SetSel(-1,-1);
    m_edit1.ReplaceSel(str1[i]+mtkversionInfo);
    m_edit1.ReplaceSel("\n");
    UpdateData(FALSE);
    mtkversionInfo="";
    // return mtkversionInfo;
    }
    }
    //  if (pbuf!=0)
    //  {
    //  delete  pbuf;
    //  }
    return "";
    }DWORD CFILEDlg::CutBuffer(char *pbuf, DWORD dwlen, char *mtkFlag)
    {
    DWORD bb;

    for(int i=0; i<dwlen; i++)
    {
    bb=i;
    if(strncmp(pbuf+i, mtkFlag, strlen(mtkFlag))==0)
    return bb;
    }
    return 1;
    }
    以上是两个函数 if(n!=0)
    *(szText+n)=0x20;  这里找的不是很准确,前面两个找对了``后面的就一塌糊涂
      

  3.   

    1:首先文件大小必须为:4M 〈= 文件 〈= 256M,否则显示“文件错误”,不运行到下一步。必须把文件的大小显示出来如:File size:XXMB2:调入文件前 2K 检查文件前 10 个字节是否为“BOOTLOADER!”不进入下一步,调入文件前8M,并且在调入文件中找“MTK_ROMINFO”。找不到则显示“文件错误,此文件不是MTK文件”,并且不运行到下一步。3:下一步把调入文件的所有内容全部传到一个pBuf中,然后关闭文件,对pBuf进行操作,找到关于时间日期的位置显示出来。4:找以*#00XX#的关键字并对其说明(为什么语言或者是干什么用的),若没有找到关键字则不进行任何显示。5:原文件大小为 8M 调入 5-7M,原文件为 16M 调入 10-14M,原文件为 32M 调入 16-20M ,原文件为 64M....原文件为 128M....原文件为 256M....6:在调入的文件中找 *#0000#,找到后在前后 1K 范围内找指令
    最新说明,对文件分块操作