• wince编程心得(一)wince字符转换函数及应用


     大家都知道wince下字符集是unicode字符集,因此在wince开发时经常会遇到unicode与ansi转换的问题,而常用的转换函数就为WideCharToMultiByte(宽字符集转多字符集),MultiByteToWideChar(多字符集转宽字符集),然而初学者在应用这两个函数时常常会犯一些概念性的错误。下面我就对这两个函数的使用做一下简单说明,希望初学者不要在这个上面犯错误,如果是函数出错,会造成缓冲区溢出,错误不好发现。
    (1)宽转多函数
    int WideCharToMultiByte(
      UINT CodePage,
      DWORD dwFlags,
      LPCWSTR lpWideCharStr,
      int cchWideChar,
      LPSTR lpMultiByteStr,
      int cbMultiByte,
      LPCSTR lpDefaultChar,
      LPBOOL lpUsedDefaultChar
    );
    UINT CodePage;//////字符集代码页
    DWORD dwFlags;//////该标志一般设置为0,具体请看EVC帮助
    LPCWSTR lpWideCharStr;///////宽字符串
    int cchWideChar;//////宽字符串的长度,以字符为单位,如果此值设为-1,则函数自动获得宽字符串的长度,编程中此值一般设置为-1        
    LPSTR lpMultiByteStr;多字节字符串缓冲区指针,
    int cbMultiByte;//////转换后多字节的缓存最大值(用字节来计算),如果传递0,则本函数返回目标缓存的大小值
    LPCSTR lpDefaultChar;/////当宽字节字符串的有字符在代码页中无法转换时,返回这个变量所指的值,一般设为NULL;
    LPBOOL lpUsedDefaultChar;这个值可以用来监测转化是否成功,通常设为NULL;

    (2)多转宽函数
    int MultiByteToWideChar(
      UINT CodePage,
      DWORD dwFlags,
      LPCSTR lpMultiByteStr,
      int cbMultiByte,
      LPWSTR lpWideCharStr,
      int cchWideChar
    );
    UINT CodePage;////字符集代码页
    DWORD dwFlags;////该标志一般设置为0,具体请看EVC帮助
    LPCSTR lpMultiByteStr;/////多字节字符串
    int cbMultiByte;/////多字节字符串长度,以字节为单位,如果此值设为-1,则函数自动获得多字节字符串长度.编程中一般设置为-1
    LPWSTR lpWideCharStr;/////宽字符串缓冲区指针
    int cchWideChar;//////宽字符串缓冲区最大值(以字符为单位),如果传0,则函数返回转化后缓冲区大小,为字符个数

    (3)MultiByteToWideChar转化实例

    void MultiByte_To_WideChar_Convert()
    {
    //////(1)声明转换前的字符串
    char chSource_Char[] = "hello world";

    //////(2)调用MultiByteToWideChar,为lpWideCharStr传递NULL , cchWideChar 传递0
    int iWide_Buffer_Size = MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , NULL , 0);

    //////(3)声明宽字符缓冲区
    WCHAR * pwchWide_Char = new WCHAR[iWide_Buffer_Size + 1];
    if(pwchWide_Char == NULL)
    {
            AfxMessageBox(L"内存分配失败");
            return;
    }
    memset(pwchWide_Char , 0 , (iWide_Buffer_Size + 1)*sizeof(WCHAR));

    //////(4)转化
    MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , pwchWide_Char , iWide_Buffer_Size);
    }

        WideCharToMultiByte()用法和上例类似。希望能够对初学者有所帮助,以免犯我犯过的错误。我做ce时间不长,如果有什么地方写的不对,希望大家能批评指正。
  • 相关阅读:
    人类思考的基本形式
    晚上睡不者原因
    东西方哲学比较
    逻辑推理的三种方法
    锻炼自己的注意力和逻辑思维能力
    预测和复盘自己的投资策略
    概念:名与实
    没有“界定问题”会出现什么问题
    问题、联系-条条大路通罗马
    程序问题调试与医生、汽车维修师
  • 原文地址:https://www.cnblogs.com/googlegis/p/2979246.html
Copyright © 2020-2023  润新知