本人乃一新手。想把一文件中的中文字读出来,
写到另外一个文件中。源程序如下: CString source,des,cur_line;
CStdioFile srcfile,desfile;
unsigned charcur_line[100] ;
int  i;
    if(!srcfile.Open("test.txt",CFile::modeRead|CFile::typeBinary)){
MessageBox("打开源文件出错");
srcfile.Close();
return; } while(srcfile.ReadString(source))
{
memset(cur_line,0,sizeof(cur_line));
memcpy(cur_line, source,sizeof(source)); for(i = 0 ; cur_line[i] != 0 ; ){
    if((cur_line[i] > 160) && (cur_line[i+1] > 160)){
des += cur_line[i];
des += cur_line[i+1];
i += 2;     }
    else{
i+=1;
    }
}

}
//MessageBox("中文文件:"+des);
srcfile.Close(); if(!desfile.Open("source.txt",CFile::modeWrite|CFile::typeBinary|CFile::modeCreate)){
MessageBox("打开目标文件失败");
return;
}
else
desfile.WriteString(des);
desfile.Close();
return;
----------------------------------
test.txt 文件为
wo我是新手
、你是 高手谢谢2结果为
我、你谢谢另外,如果我不用数组转换,直接用CString 对象或指针
该如何实现呢???

解决方案 »

  1.   

    判断汉字是不是你这样的?好象是<0吧!
    cur_line[i]改成char c=cur_line.GetAt(i)
    这些东西以前处理过,现在有点忘了
      

  2.   

    to ffit
    汉字是这样判断的,
    GetAt(i)是CString类的函数,
    好像也不太行,我有空再试试
    谢谢你
      

  3.   

    {
    CStdioFile srcfil,desfil;
    CString   srcstr,desstr;
    unsigned char q1,q2;
    int i;
        if(!srcfil.Open("test.txt",CFile::modeRead|CFile::typeBinary)){
    MessageBox("打开源文件出错");
    srcfil.Close();
    return; } while (1)
    {

    if ( !srcfil.Read(&q1,sizeof(char))) break;
    if (q1 < 160) {

    continue;
    } if ( !srcfil.Read(&q2, sizeof(char))) break; if(q2 < 160) {
    continue;
    }
    desstr += q1;
    desstr += q2;

    }
    MessageBox(desstr); srcfil.Close();
    if(!desfil.Open("source.txt",CFile::modeWrite|CFile::typeBinary|CFile::modeCreate)){
    MessageBox("打开目标文件失败");
    return;

    }
    else
    desfil.WriteString(desstr);

    desfil.Close();
    MessageBox("写目标文件成功!");
    return;
    }
      

  4.   

    汉字范围错了,首字节应为0X81~0XFE
      

  5.   

    //现汉字采用GB18030编码
    CString str="123中a华bz,1。2;3人2喆*";//喆
    CString changestr;
    changestr="";
    CString show;
    CString strTemp;
    show="";
    int len = str.GetLength();
    for(int i = 0;i<len;i++)
    {
    strTemp.Format("%02X,",(unsigned char)str[i]);
    show+=strTemp;
    if(((unsigned char)(str.GetAt(i))>0x81) && ((unsigned char)(str.GetAt(i))<0xFE) )//如果属于汉字;str.GetAt(i))>0xaf && (str.GetAt(i)<0xfe)喆
    {
    changestr+=str.Mid(i,2);
    i++;
    strTemp.Format("%02X,",(unsigned char)str.GetAt(i));
    show+=strTemp;
    }
    else{
    //AfxMessageBox("不是汉字!");
    }
    }
    str+="\r\n";
    show=str+show;
    show+="\r\n";
    show+=changestr;
    //AfxMessageBox(show);
    AfxMessageBox(str+changestr);
      

  6.   

    rainsing 和 sdf123321() 的方法都可行,
    谢谢大家
    有谁能告诉我的程序问题出在哪里呢?
      

  7.   

    //memcpy(cur_line, source,sizeof(source));int nLength=source.GetLength();
    if(nLength>=100)
    {
       nLength=99;
    }
    memcpy(cur_line, source.GetBuffer(nLength),sizeof(char)*nLength);
    source.ReleaseBuffer();
      

  8.   

    /*while(srcfile.ReadString(source))
    {
    memset(cur_line,0,sizeof(cur_line));
    memcpy(cur_line, source,sizeof(source));
    for(i = 0 ; cur_line[i] != 0 ; ){
    if((cur_line[i] > 160) && (source[i+1] > 160)){
    des += source[i];
    des += source[i+1];
    i += 2;

    }
    else{
    i+=1;
    }
    }
    */
    while(srcfile.ReadString(cur_line))
    {
    int nLength=source.GetLength();

    for(i = 0 ; i<(nLength-1) ; ){
    if((cur_line[i] > 160) && (cur_line[i+1] > 160)){
    des += cur_line[i];
    des += cur_line[i+1];
    i += 2;

    }
    else{
    i+=1;
    }
    }

    }
      

  9.   

    用_mbclen来判断是否为多字节字符