MultiByteToWideChar, WideCharToMultiByte

 

MultiByteToWideChar

复制代码
    const UINT codePage = 936;                              // GB 2312.
    CCHAR *multiByteString = "源字符串abcd";

    // First: get count of multi-byte string.
    const DWORD cCh = MultiByteToWideChar(codePage,         // Character Page.
                                          0,                // Flag, always be 0.
                                          multiByteString,  // Multi-byte string.
                                          -1,               // '-1' is to determind length automatically.
                                          NULL,             // 'NULL' means ignore result. This is based
                                                            // on next argument is '0'.
                                          0);               // '0' is to get the count of character needed 
                                                            // instead of to translate.

    // Second: allocate enough memory to save result in wide character.
    PWCHAR pWideCharString = new WCHAR[cCh];
    ZeroMemory(pWideCharString, cCh * sizeof(pWideCharString[0]));

    // Third: Translate it!
    MultiByteToWideChar(codePage,                           // Character Page.
                        0,                                  // Flag, always be 0.
                        multiByteString,                    // Multi-byte string.
                        -1,                                 // Count of character of string above.
                        pWideCharString,                    // Target wide character buffer.
                        cCh);                               // Count of character of wide character string buffer.

    // Fourth: use it!
    // ...

    // Fifth: deallocate the memory.
    delete pWideCharString;
    pWideCharString = NULL;

复制代码

 

 

WideCharToMultiByte

复制代码
    const UINT codePage = 936;                              // GB 2312.
    WCHAR *wideCharString = L"源字符串abcd";

    // First: get count.
    const DWORD cCh = WideCharToMultiByte(codePage,            
                                          0,
                                          wideCharString, 
                                          -1,
                                          NULL,
                                          0,
                                          NULL,             // When the wide character to be traslated
                                                            // is not in code page, proc will use this 
                                                            // variable to fill with. We usually set it
                                                            // to NULL.
                                          NULL);            // This variable will save the number of 
                                                            // character which can't be tranlated. We
                                                            // usually set it to NULL.

    // Second: allocate enough memory to save result.
    PCHAR pMultiByteString = new CHAR[cCh];
    ZeroMemory(pMultiByteString, cCh * sizeof(pMultiByteString[0]));

    // Third: Translate it!
    WideCharToMultiByte(codePage,
                        0,
                        wideCharString,
                        -1,
                        pMultiByteString,
                        cCh,
                        NULL,
                        NULL);

    // Fourth: use it!
    // ...

    // Fifth: deallocate the memory.
    delete pMultiByteString;
    pMultiByteString = NULL;
复制代码

 

posted @   walfud  阅读(1583)  评论(0编辑  收藏  举报
编辑推荐:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf
点击右上角即可分享
微信分享提示