• Unicode/not set/multibyte/部分常用函数


    字符编码

          两种字符类型 char  / wchar_t

          TCHAR是一个宏

                                       多字节编码时:替换为char

                                       Unicode编码时:替换为wchar_t

    l      不能使用strcpy这样的ANSI C字符串函数处理wchar_t字符串,须使用wcs前缀的函数。

    l      为了使编译器识别Unicode字符串,在字符串前面加L前缀。

    wchar_t *szTest = L”This is a Unicode string”;

    l      使用TCHAR: 不应该使用ANSIstrxxxUnicodewcsxxx 须使用Tchar.h中定义的_tcsxxx,并用_TEXT代替L

    l       

    函数

    *     _tcslwr 将字符串转化成小写字母(VS2005+WinCE6.3

    *     lstrcpy 复制(VS2005+WinCE6.3

    Cstring TCHAR

    TCHAR之间的复制

    lstrcpy(TCHAR  , TCHAR);

    lstrcpy(TCHAR  , CString);

          CString str= _T("VS");

           printf("str.getlength()=%d/n",str.GetLength()); //Unicode3个字符  //not set 4个字节。//mult 4//not set ==mult??

           int a;

           a=wcslen(str);

           printf("a=%d/n",a);//3

           a=_tcslen(str);

           printf("a=%d/n",a);//3

     

           TCHAR tstr[10];

           a=wcslen(tstr);printf("a=%d/n",a);//1  

           lstrcpy(tstr,str);

           a=wcslen(tstr);printf("a=%d/n",a);//3

     

    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、winbase.h

    #define lstrcpyW wcscpy

    #ifdef UNICODE

    #define lstrcpy lstrcpyW

    #else

    #define lstrcpy lstrcpyA

    #endif

    、、、、、、、、、、、、、、、、、、、、、、、、、、、tchar.h

    #define _tcscpy         wcscpy

     

     

    *     wsprintf 复制(VS2005+WinCE6.3

    TCHAR *CurrentPath;

    TCHAR CurrentFullPath[MAX_PATH];

    wsprintf(CurrentFullPath,TEXT("%ls//*.*"),CurrentPath);

     

    winbase.h中:

    #ifdef UNICODE

    #define wsprintf wsprintfW

    #else

    #define wsprintf wsprintfA

    #endif

     

    *     wcslen 获取字符串长度(环境VS2005

    if(0==wcslen(CurrentPath)){};

    wcslen(CString)multi-byte/not set字符集编译错误

    cannot convert parameter 1 from 'CString' to 'const wchar_t *'

    Unicode字符集正确,返回字符数。同Cstring.GetLength();

    #define _tcslen         wcslen //tchar.h

    _tcslen  multi-byte/not set/Unicode均可以用,在Unicode下返回字符数,在multi-byte/not set下返回字节数。

    以上结果在PC上得出,

    wince6.3版本在multi-byte/not set 情况下报错,只能用Unicode,应该与所有SDK有关。

    WinCE6.3 +Unicode:

    Cstring str=_T(VS);

    wcslen(str)==_tcslen(str)==str.GetLength()==3

    strlen(str):报错,

    cannot convert parameter 1 from 'CString' to 'const char *'

     

    *     wmemcmp比较字符串 VS2005+WinCE6.3

    if(wmemcmp(FolderName,_T("//网络"),wcslen(FolderName))==0){// 等于零代表想同}

    *     _wcsuper 字符串小写换为大写(VS2005+WinCE6.3

    TCHAR *FileName;

    //赋值

    TCHAR *UpperFileName =_wcsupr(FileName);

    *      

    *      字符集转化函数

    MultiByteToWideChar

            WideCharToMultiByte

            LCMapString (简体与繁体转化)

     

     

     

    悲催的,脑袋僵的很,明明知道Unicode一个字符两个字节,还一直想怎么获取一个CString 的字节数!    字符数*2!!!!弱弱弱

  • 相关阅读:
    java修饰符 protect public protected
    java中interface使用
    java中super的用法
    引用的一道JAVA题目
    java中==和equals的区别(转)
    2019PHP面试题最全面归纳总结
    (一)PHP基础知识考察点
    Linux常用命令大全(非常全!!!)
    MAMP mysql无法启动 总结(以后有发现再添加)
    win 安装composer (详细教程)
  • 原文地址:https://www.cnblogs.com/ezhong/p/2171477.html
Copyright © 2020-2023  润新知