标题只是一个例子。
完整的问题是这样的:一个二进制流包含各种字符,有常规的各种字母、数字,还有汉字等,还有一些诸如'\xae','\xaf'之类的字符。想把它转换为宽字符串(wchar_t[])。如何在转换时能正确区别多字节的字符(如汉字)和象'\xae'、'\xaf'这样的单字节字符。
例如:
"ABC我\xaf\axe"在转换后应是6个字符而不是5个。我用MultiByteToWideChar转换不行:
MultiByteToWideChar(CP_ACP,0,...);该如何做?

解决方案 »

  1.   

    BOOL LetMeHelp(char* szBuf,LPWSTR lpWCharStr,int nLen)
    {
      char* ptr=(char*)lpWCharStr;
      int nCurLen=0;
      while(*szBuf++)
      {
        if(nCurLen>nLen-1)
           return FALSE;
       if(*szBuf<80)
       {
           *ptr++=0x00;
           *ptr++=*szBuf++;
        }
        else
        {    
           *ptr++=*szBuf++;
           *ptr++=*szBuf++;
         }
         nCurLen++;
      }
      *ptr++=0x00;
      *ptr=0x00;
      return TRUE;
    }void main()
    {
      char* str="ABC我\xaf\axe";
      WCHAR wStr[100];
      if(LetMeHelp(str,wStr,100))
         printf("I am OK.\n");
      else
         printf("I do not know why.\n");
    }(以上代码未经测试,使用者后果自负,作者保留所有版权)