API函数原型:
1. 多字节字符串转宽字节字符串。
字节字符串后的长度时, 如果为-1,那么此函数将返回带有字符串终止符的字符串长度。
2. 宽字节字符串转多字节字符串。
那么接下来我们写个程序:
1. 多字节字符串转宽字节字符串。
int MultiByteToWideChar(
_In_ UINT CodePage, // 代码页
_In_ DWORD dwFlags, // 转换方式
_In_ LPCSTR lpMultiByteStr, // 被转换多字节字符串地址
_In_ int cbMultiByte, // 被转换多字节字符串长度
_Out_opt_ LPWSTR lpWideCharStr, // 用于存放宽字节字符串地址
_In_ int cchWideChar // 宽字节字符串长度
);
这里我们需要注意的就是第4个参数[
int cbMultiByte],此参数在计算多字节字符串转换成宽
字节字符串后的长度时, 如果为-1,那么此函数将返回带有字符串终止符的字符串长度。
2. 宽字节字符串转多字节字符串。
int WideCharToMultiByte(
_In_ UINT CodePage, // 代码页
_In_ DWORD dwFlags, // 转换方式
_In_ LPCWSTR lpWideCharStr, // 被转换宽字节字符串地址
_In_ int cchWideChar, // 被转换宽字节字符串长度
_Out_opt_ LPSTR lpMultiByteStr, // 用于存放多字节字符串地址
_In_ int cbMultiByte, // 多字节字符串长度
_In_opt_ LPCSTR lpDefaultChar, // 使用的缺省字符串的地址
_Out_opt_ LPBOOL lpUsedDefaultChar // 缺省字符串被使用的标识
);
这里第4个参数[
int cchWideChar]同上。
那么接下来我们写个程序:
#include <windows.h>
// 多字节字符串转宽字节字符串
void Multi2Wide()
{
// 多字节字符串
char *pszMText = "这是一个多字节字符串";
// 取得变换后宽字节字符串长度
int nLen = MultiByteToWideChar( CP_ACP, 0, pszMText, -1, NULL, 0 );
// 动态分配宽字符字符串空间
wchar_t *pszWText = new wchar_t[nLen];
// 对动态分配空间初始化
memset( pszWText, 0, sizeof(wchar_t) * nLen );
// 多字节转宽字节字符串
MultiByteToWideChar( CP_ACP, 0, pszMText, strlen(pszMText), pszWText, nLen );
// 显示
MessageBoxW( NULL, pszWText, L"信息", MB_OK );
// 释放资源
delete[] pszWText;
pszWText = NULL;
}
// 宽字节字符串转多字节字符串
void Wide2Multi()
{
// 宽字节字符串
wchar_t *pszWText = L"这是一个宽字符字符串";
// 取得变换后多节字符串长度
int nLen = WideCharToMultiByte( CP_ACP, 0, pszWText, -1, NULL, 0, NULL, NULL );
// 动态分配多字符字符串空间
char *pszMText = new char[nLen];
// 对动态分配空间初始化
memset( pszMText, 0, sizeof(char) * nLen );
// 多字节转宽字节字符串
WideCharToMultiByte( CP_ACP, 0, pszWText, wcslen(pszWText), pszMText, nLen, NULL, NULL );
// 显示
MessageBoxA( NULL, pszMText, "信息", MB_OK );
// 释放资源
delete[] pszMText;
pszMText = NULL;
}
// 入口函数
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 多字节字符串转宽字节字符串
Multi2Wide();
// 宽字节字符串转多字节字符串
Wide2Multi();
return 0;
}