0
点赞
收藏
分享

微信扫一扫

Windows应用程序--多字节字符与宽字节字符转换

互联网码农 2022-01-04 阅读 75
windows

多字节字符转换为宽字节字符使用MultiByteToWideChar()

宽字节字符串转换为多字节字符串使用WideCharToMultiByte()

函数原型即参数如下:

// 返回目的字符串的长度
int MultiByteToWideChar(
	UINT CodePage,  // CP_CAP实现了ANSI与Unicode之间的转换;CP_UTF8实现UTF-8与Unicode之间的转换
	DWORD dwFlags,  //  一般为0
	LPCTSTR lpMultiByteStr,  // 要转换的多字节字符
	int cchMultiByte,  // 多字节字符的长度,-1时表示自己计算长度
	LPWSTR lpWideCharStr,  // 目的字符串,宽字节字符串
	int cchWideChar  // 目的字符串长度,宽字节字符串的长度
);

// 返回目的字符串的长度
int WideCharToMultiByte(
	UINT codePage,  // CP_CAP实现了ANSI与Unicode之间的转换;CP_UTF8实现UTF-8与Unicode之间的转换
	DWORD dwFlags,   //  一般为0
	LPWSTR lpWideChar,  // 要转换的宽字节字符串
	int cchWideChar,  // 宽字节字符串的字符个数
	LPCSTR lpMultiByte,  // 目的字符串,多字节字符串
	int cchMultiByte,  // 目的字符串中的字符个数
	LPCSTR lpDefaultChar,  // 遇到不能转换的宽字符时,函数使用该参数指向的字符
	PBOOL pfUsedDefaultChar  // 只烧有一个字符不能转换为多字节形式时,该值=TRUE
);

使用示例:

int WINAPI WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nShowCmd)
{

	int k;  // 字符个数

	// 多字节转换为宽字节
	char chTmp[] = "helloWorld";
	wchar_t* chWideTmp;
	k = MultiByteToWideChar(CP_ACP, 0, chTmp, -1, NULL, 0);  // 获取转换后的宽字节的字符个数
	chWideTmp = new wchar_t[k * sizeof(wchar_t)];
	MultiByteToWideChar(CP_ACP, 0, chTmp, -1, chWideTmp, k);
	MessageBox(NULL, chWideTmp, L"MultiByteToWideChar", MB_OK);

	// 宽字节转换为多字节字符串
	TCHAR tchTmp[] = L"HelloWorld";
	char* cchTmp;
	TCHAR tchTmp1[30];
	k = WideCharToMultiByte(CP_ACP, 0, tchTmp, -1, NULL, 0, NULL, NULL);
	cchTmp = new char[k * sizeof(char)];
	WideCharToMultiByte(CP_ACP, 0, tchTmp, -1, cchTmp, k, NULL, NULL);
	
	return 0;
}
举报

相关推荐

0 条评论