CString str;
str.Format("程序员之家");
str.GetLength();   //结果是10
BSTR n = str.AllocSysString();
n.length();// 结果是5了怎么会有这种现象,如何解决?
总不能×2吧,我有的字符串可能是“aabb中国c"这样的

解决方案 »

  1.   

    非unicode下
    CString 一个单位是char,一个汉字2个charBSTR是Unicode编码,一个汉字一个wchar_t所以是5个wchar_t如果是
    aabb中国c 则是7wchar_t不算结尾的0
      

  2.   

    如何解决这个问题?如果我不想换到unicode下
      

  3.   

    >如何解决这个问题?
    ----------------------------
    不用 str.AllocSysString();
      

  4.   

    我的想法
    用Unicode,就没问题如果非Unicode,就判断每个字符首位是否为'1'(中文),是的话,后面两个就算一个,自己计算
      

  5.   

    CString(n).GetLength()用一个CString临时对象来计算长度吧。感觉好别扭!
      

  6.   

    LZ的问题到底是什么啊?
    是想求这个 "aabb中国c" 的长度为7?printf( "%d",_tcsclen( "aabb中国c" ) ); // 7
      

  7.   

    To Snow_Ice11111(雪上加冰):
    我也是用个CString来计算的,别扭啊,所以才上来咨询的.
    PS:我的问题不是求"aabb中国c"的长度,我的问题是指这种转化,怎么能使bstr的length()的指为实际我CString的值
    还有没有更好的办法?
      

  8.   

    > ... 怎么能使bstr的length()的指为实际我CString的值 ?
    ------------------------
    请修改 Microsoft 的 Platform SDK