WideCharToMultiByte
是一個Windows API函數,用于將寬字符(如UTF-16)轉換為多字節字符(如ASCII或UTF-8)。下面是一個簡單的示例,演示如何使用WideCharToMultiByte
函數將寬字符串轉換為多字節字符串。
首先,確保在你的項目中包含了頭文件<windows.h>
。
#include <stdio.h>
#include <windows.h>
int main()
{
// 定義一個寬字符串
const wchar_t* wideStr = L"Hello, 世界!";
// 獲取寬字符串的長度(不包括空終止符)
int wideStrLen = wcslen(wideStr);
// 定義一個緩沖區來存儲轉換后的多字節字符串
char* multiByteStr = NULL;
// 計算所需的多字節字符數(包括空終止符)
int multiByteSize = WideCharToMultiByte(CP_UTF8, 0, wideStr, wideStrLen, NULL, 0, NULL, NULL);
if (multiByteSize > 0)
{
// 為多字節字符串分配足夠的內存
multiByteStr = (char*)malloc(multiByteSize * sizeof(char));
// 將寬字符串轉換為多字節字符串
int result = WideCharToMultiByte(CP_UTF8, 0, wideStr, wideStrLen, multiByteStr, multiByteSize, NULL, NULL);
if (result == 0)
{
// 轉換失敗,處理錯誤
printf("WideCharToMultiByte failed with error code: %d\n", GetLastError());
free(multiByteStr);
return 1;
}
// 輸出轉換后的多字節字符串
printf("Multi-byte string: %s\n", multiByteStr);
// 釋放分配的內存
free(multiByteStr);
}
else
{
// 轉換失敗,處理錯誤
printf("WideCharToMultiByte failed with error code: %d\n", GetLastError());
return 1;
}
return 0;
}
在這個示例中,我們首先定義了一個寬字符串wideStr
,然后使用wcslen
函數獲取其長度。接下來,我們計算所需的多字節字符數,并使用WideCharToMultiByte
函數將寬字符串轉換為多字節字符串。最后,我們輸出轉換后的多字節字符串,并釋放分配的內存。
注意:在調用WideCharToMultiByte
時,第二個參數(dwFlags
)設置為0,表示使用默認的行為。你可以根據需要設置其他標志。例如,如果你想要在轉換過程中忽略錯誤字符,可以將該參數設置為WC_ERRSPACE
。