关于MultiByteToWideChar及WideCharToMultiByte使用方法

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;
}


猜你喜欢

转载自blog.csdn.net/cyousui/article/details/16917471
今日推荐