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