C++ UNICODE string and multi-byte string conversion

#include <STDLIB.H>
#include <LOCALE.H>
#include <Windows.h>

int main(int argc, char* argv[])
{
    setlocale(LC_ALL,"");    // 否则无法输出中文

    char    ansiStr[] = "这是一个ANSI字符串";
    printf( "ansiStr: %s\n", ansiStr );

    wchar_t wideStr[] = L"这是一个UNICODE字符串";
    wprintf( L"wideStr: %s\n", wideStr );


    // 转换ANSI字符串到UNICODE字符串
    int len = MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, NULL, 0);  // 先取得转换后的UNICODE字符串所需的长度
    wchar_t* buf1 = (wchar_t*)calloc(len, sizeof(wchar_t));         // 分配缓冲区
    MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, buf1, len);    // 开始转换
    wprintf(L"转换后的UNICODE字符串: %s\n", buf1);                 // 输出转换后的字符串
    free(buf1);                                                                             // 释放缓冲区

    // 转换UNICODE字符串到ANSI字符串
    len = WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL);  // 先取得转换后的ANSI字符串所需的长度
    char* buf2 = (char*)calloc(len, sizeof(char));                                             // 分配缓冲区
    WideCharToMultiByte(CP_ACP, 0, wideStr, -1, buf2, len, NULL, NULL);   // 开始转换
    printf("转换后的ANSI字符串: %s\n", buf2);                                                 // 输出转换后的字符串
    free(buf2);                                                                                                 // 释放缓冲区

    return 0;
}

 

Guess you like

Origin blog.csdn.net/dxm809/article/details/113880796