UNICODE字节流如何转换成字符串(内含中文)?

Jamie   2008-12-5 13:17 楼主
在wince5.0上调用别人的动态库,返回的是UNICODE的字节流(BYTE data[DATALEN]),
我使用以下方法转换:
CString str;
for( i=0; i {
  str += data;
}

结果是:返回英文就正常,如果里面包含中文,中文部分就是乱码。

我试过MultiByteToWideChar,没有成功。

请指点迷津!谢谢!!

回复评论 (6)

TCHAR *s = new TCHAR[DATALEN];
wcscpy(s, (TCHAR*)data);
str = s;
点赞  2008-12-5 13:25
你好像用反了吧,用WideCharToMultiByte才符合你的要求。
点赞  2008-12-5 13:25
mark。以前貌似有人问过了。。。
点赞  2008-12-5 13:37
多字节和宽字符之间转换的函数:mbstowcs, mbtowc, wcstombs, wctomb.
  mbstowcs---Convert a multi-byte(ANSI) string to wide character stirng(Unicode).
  wcstombs---Convert a wide character string to multi-byte string.
  WCHAR szwcBuffer[100];
  char szBuffer[100];
  char* lpszConvert = "ANSI String to convert";
  WCHAR* lpszwcConvert = _T("Unicode string to convert");
  int nChars;
  nChars = mbstowcs(szwcBuffer, lpszConvert, 100);
  nChars = wcstombs(szBuffer, lpszwcConvert, 100);
  //MultiByteToWideChar, WideCharToMultByte.        //用在code page(编码页)
点赞  2008-12-5 13:44
试试这个函数比较容易:
  1. #include
  2. size_t wcstombs(char *out, const wchar_t *in, size_t size);
点赞  2008-12-5 13:58
搞定!
谢谢大家。

LPOLESTR char_to_wchar(LPCSTR lpa)
{
      size_t aLen = strlen( lpa ) + 1;
      
      int wLen = MultiByteToWideChar(
                CP_ACP,
                0,
                lpa,
                aLen,
                NULL,
                0);
      
      LPOLESTR lpw = new WCHAR [wLen];
      MultiByteToWideChar(
                CP_ACP,
                0,
                lpa,
                aLen,
                lpw,
                wLen);

        return lpw;
}
点赞  2008-12-5 15:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复