\xB0\x43第一个字节的最高为是1,被解释为双字节字符
CString str = _T("\xB0\x43")这个是在编译的时候直接填充字符值

解决方案 »

  1.   

    那请问要如何才能让转换达到直接赋值的结果呢?我想把一个string型的"\xB0\x43"(摄氏度单位)如何转换成CString并在界面上显示出来
      

  2.   

    wchar buf[] = {0xB0, 0x43, 0x00};
    SetDlgItemTextW(IDC_EDIT1, buf);
      

  3.   

    我试了下这样是有效的,我是VS08是Unicode编码
    我现在的问题是要将一个string的"\xB0\x43"转换成CString,请问该如何转换?您上面那两行代码也相当于我一开始说的直接赋值的吧
      

  4.   

    的GBK编码是\xa1\xe6,
    UNICODE是\xB0\x00\x43\x00,你一开始就搞错了. char sText[20] = {"\xa1\xe6"};
    DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0);
    TCHAR *pwText;
    pwText = new TCHAR[dwNum+1];
    MultiByteToWideChar (CP_ACP, 0, sText, -1, pwText, dwNum+1);
      

  5.   


    你好,\xA1\xE6是中文输入法状态下的℃,相当于一个汉字,2长度
    我现在的串是英文下的°和一个字母C,相当于2个字符,2个长度
    再者,我试了你给的代码,转完以后是  
    03 21 00 00 cd cd fd 
    并不是  b0 00 43 00
      

  6.   

    MultiByteToWideChar转换出来的确是有问题,mbstowcs_s可以正确转换,具体原因不明
    char sText[20] = {"\xB0\x43"};
    LPWSTR tmp = new WCHAR[3];
    UINT i;
    mbstowcs_s(&i, tmp, 3, sText, 3);
      

  7.   

    MultiByteToWideChar (1252, 
    不要用默认代码页
      

  8.   

    char sText[20] = {"\xB0\x43"};
    char sText2[] = {"中国"};
    LPWSTR tmp = new WCHAR[12];
    UINT i;

    mbstowcs_s(&i, tmp, 3, sText, 3);
    _tsetlocale(LC_ALL, TEXT("chs"));
    mbstowcs_s(&i, 0, 0, sText2, strlen(sText2)+1);
    mbstowcs_s(&i, tmp, i, sText2, _TRUNCATE);
      

  9.   

    你好,非常感谢你。但是也有个问题,对于给定的一个串是未知串,不知道他是否是中文所以不能确定是否要先_tsetlocale
    可能有人说可以判断是否有中文啊,网上说大于0x80还是0xA0的字符就说明有中文了,但是"\xB0\x43"和"中国"却刚好都满足条件,可是转换方法却不一样。。
    所以我目前的做法就是枚举了,特殊处理"\xB0\x43"等等之类