相互轉換的兩個函數的聲明:
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; }