我有个从BSTR转过来的CString:BSTR szFormat
CString csFormat = W2A(szFormat);csFormat中是英文和汉字混合的字符串
我想把这个字符串按一个字符一个字符,而不是一个字节一个字节的读出来
然后每个字符做判断再处理我现在有一段循环:
while( iLen<csFormat.GetLength())
{
if(csFormat.GetAt(iLen) == '|')
{
按GetAt()处理的,但是这样,如果碰上像"億"这样的生僻字,第二个字节就是"|"
这样循环会出问题所以我需要一个字符一个字符的处理
是需要先转成unicode么?
大家有什么例子么?

解决方案 »

  1.   

    IsDBCSLeadByte函数能够判断一个字符是否是双字的第一个字节_ismbslead
    _ismbstrail
      

  2.   

    干嘛要W2A(),你应该先完成必要的操作后再W2A
      

  3.   

    其实很多微软的函数并不能很好的处理这种问题。你可以从第0个位置开始逐个char地读取,然后分析:如果这个char的值小于0,就说明是汉字,要把后面的一个char也取出凑成一个汉字;如果这个char大于0,说明是英文。
      

  4.   

    搞定了 BOOL prevByteIsChineseFirstByte=FALSE; // add by xxx  20040617 前一个字节为汉字第一个字节
    BOOL canBeChineseFirstByte=TRUE; //add by xxx  20040617 当前字节可能为汉字的第一个字节时 while( iLen<csFormat.GetLength())
    {
    //add if&else by xxx  20040618 对汉字进行处理
    if(canBeChineseFirstByte)//如果当前字节可能为汉字的第一个字节时
    {
    if(iLen && IsDBCSLeadByte(csFormat.GetAt(iLen-1)))//如果不是字符串第一个字节且前一个字节为汉字的第一个字节时
    {
    prevByteIsChineseFirstByte=TRUE;//前一个字节为汉字第一个字节
    canBeChineseFirstByte=FALSE;//设置下一个字节即汉字的第二个字节在处理时不能被认为是汉字的第一个字节
    }
    else
    {
    prevByteIsChineseFirstByte=FALSE;
    canBeChineseFirstByte=TRUE;
    }
    }
    else//当前字节不可能为汉字的第一个字节
    {
    prevByteIsChineseFirstByte=FALSE;
    canBeChineseFirstByte=TRUE;
    }//end of add by xxx  20040618

    if(csFormat.GetAt(iLen) == '|' && !prevByteIsChineseFirstByte)//add && !prevByteIsChineseFirstByte by xxx  20040618 如果当前字节为'|'且当前字节不在汉字中时
    {