在CString中保存了一个字符串,例如:
CString str("温度1261541875|ADC1:0.00V,ADC2:0.00V,ADC3:0.00V,ADC4:0.00V当前温度");
如何判断字符串中那些是中文字符,那些是ANSI字符?

解决方案 »

  1.   

    首先您的说法有问题,中文字符和ANSI字符不成对立面。
      

  2.   

    从头开始逐个取字符串中的每个元素(char类型),如果元素的值小于0,则说明该元素与下一元素共同组成一个中文字符;如果大于0,则是数字、英文字母或符号。
      

  3.   

    int   IsGB(PTSTR   pText)   
    {   
    unsigned   char   sqChar[20];   
    sqChar[0]=*pText;   
    if   (sqChar[0]>=0xa1)   
    if   (sqChar[0]==0xa3)   
    return   1; //全角字符   
    else   
    return   2; //汉字   
    else   
    return   0; //英文、数字、英文标点   
     } 
      

  4.   

    中文的unicode码的范围4e00-9fa5 
    --------------------------------------------------------------- 
    以下可能比较全一些,取得高字节HIBYTE(a),取得低字节LOBYTE(a)这两个宏会有所帮助 
    剩下的就是判断区间了 先转换为unicode,再判断每个字符的码所在区间,就可以相对准确的判断哪些是中文。粗略的判断可以用下面这个  bool   IsChinese(unsigned   char   bC1,unsigned   char   bC2)   
      {   
      if((bC1>=0xa1)&&(bC1<=0xfe)&&   
      (bC2>=0xa1)&&(bC2<=0xfe))   
        return         true;   
        
              return       false;   
      }   
      

  5.   

    Unicode的字符串常量怎么会这么写?
    CString str("温度1261541875|ADC1:0.00V,ADC2:0.00V,ADC3:0.00V,ADC4:0.00V当前温度");
    应该是:
    CString str(L"温度1261541875|ADC1:0.00V,ADC2:0.00V,ADC3:0.00V,ADC4:0.00V当前温度");如果是Unicode,只要判断字符值是否小于256就可以了,小于256的是数字、英文字母或符号。
      

  6.   

    你这是Unicode?真的假的,要么写个L要么用_T(),你啥都没有
      

  7.   

    使用CString的GetAt,跟踪的时候可以看到中文字符的编码值,比方“温”是28201,ANSI字符是小于256的。
    因为需要把这些字符按4个比特一个单位来切分,然后编码,对于ANSI来说切分成2部分就可以了,对于中文字符就得切分成4部分。
    所以需要从其中辨别是哪类字符。这种方式不知道是否可行。TCHAR ch = str.GetAt();
    if (ch > 255)
    {
         中文字符
    }
    else
    {
         ANSI字符

      

  8.   

    Unicode的很好解决,直接取得每一个字符,判断字符值就行了
    ANSI的话,看如下的范例CString   s;   
      s   =   "sss黄飞鹄9999";   
      int   lens;   
      lens   =   strlen(s);   
        
      unsigned   char     s1[10],s2[10],s3[10];   
        
      unsigned   char   ch;   
      int   l,m,n;   
      l=m=n   =   0;   
      for(int   i=0;i<lens;i++){   
      ch   =   s[i];   
      if(ch   >   0x7f){   
      s1[l++]   =   ch;   
      }else   if(ch   >=   '0'   &&   ch   <=   '9'){   
      s2[m++]   =   ch;   
      }else{   
      s3[n++]   =   ch;   
      }   
      }   
      s1[l]   =   '\0';   
      s2[m]   =   '\0';   
      s3[n]   =   '\0';   
      CString   cs;   
      cs   =   s1;   
      MessageBox(cs,"中文",MB_OK);   
      cs   =   s2;   
      MessageBox(cs,"数字",MB_OK);   
      cs   =   s3;   
      MessageBox(cs,"英文",MB_OK);
      

  9.   

    前后矛盾,你究竟是MBCS还是Unicode
      

  10.   

    我的项目整个是Unicode的,所以这么写,CString也会自动转成Unicode。
      

  11.   

    http://jlqzs.blog.163.com/blog/static/2125298320070101826277/
    看看这个
      

  12.   


    呵呵,我以为MBCS就是指ANSI,我得去搜搜什么是MBCS了。