UNICODE字符串與多字節字符串的轉換


相互轉換的兩個函數的聲明:

1. 多字節字符串與寬字符串的轉換
int MultiByteToWideChar(
    UINT CodePage,         // code page,一般設為 CP_ACP
    DWORD dwFlags,         // character-type options,一般為設0
    LPCSTR lpMultiByteStr, // string to map,指向一個多字節字符串
    int cbMultiByte,       // number of bytes in string,多字節字符串的長度(字節數,當以0結尾的時候,也可以設為-1)
    LPWSTR lpWideCharStr,  // wide-character buffer,存放轉換后的寬字符串緩沖區
    int cchWideChar        // size of buffer,寬字符串緩沖區的最大長度(字符數)
  );
2. 寬字符串與多字節字符串的轉換
int WideCharToMultiByte(
    UINT CodePage,            // code page,一般設為 CP_ACP
    DWORD dwFlags,            // performance and mapping flags,一般為設0
    LPCWSTR lpWideCharStr,    // wide-character string,指向一個寬字符串
    int cchWideChar,          // number of chars in string,寬字符串的長度(字符數)
    LPSTR lpMultiByteStr,     // buffer for new string,存放轉換后的多字節字符串緩沖區
    int cbMultiByte,          // size of buffer,多字節字符串緩沖區的最大長度(字節數)
    LPCSTR lpDefaultChar,     // default for unmappable chars,轉換失敗的字符所顯示的字符串,一般設為NULL
    LPBOOL lpUsedDefaultChar  // set when default char used,如果有字符轉換失敗,則為TRUE,一般設為NULL
  );
3. 用法
#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;
}
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM