您的位置:首页 > 其它

关于MultiByteToWideChar及WideCharToMultiByte使用方法

2013-11-24 11:38 441 查看
API函数原型:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: