windows核心编程---UNICODE和ANSI间的相互转换
UNICODE和ANSI间的相互转换 ,主要通过以下两个函数进行转换:MultiByteToWideChar和WideCharToMultiByte。
函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。
函数原型:
#include <Windows.h> BOOL StringReverseW(PWSTR pWideCharStr, DWORD cchLength);BOOL StringReverseA(PSTR pMultiByteStr, DWORD cchLength); #ifdef UNICODE#define StringReverse StringReverseW#else#define StringReverse StringReverseA#endif //UNICODE BOOL StringReverseW(PWSTR pWideCharStr, DWORD cchLength){ PWSTR pEndStr = pWideCharStr + wcsnlen_s(pWideCharStr,cchLength)-1; wchar_t cTempStr; while (pWideCharStr < pEndStr) { cTempStr = *pWideCharStr; *pWideCharStr = *pEndStr; *pEndStr = cTempStr; pWideCharStr++; pEndStr--; } return TRUE;} BOOL StringReverseA(PSTR pMultiByteStr, DWORD cchLength){ PWSTR pWideCharStr; int nLenOfWideChar; BOOL fOK = FALSE; nLenOfWideChar = MultiByteToWideChar(CP_ACP,0,pMultiByteStr,cchLength,NULL,0); pWideCharStr = (PWSTR)HeapAlloc(GetProcessHeap(),0,nLenOfWideChar*sizeof(wchar_t)); if(pWideCharStr == NULL) return fOK; MultiByteToWideChar(CP_ACP,0,pMultiByteStr,cchLength,pWideCharStr,nLenOfWideChar); fOK = StringReverseW(pWideCharStr,cchLength); if(fOK) WideCharToMultiByte(CP_ACP,0,pWideCharStr,cchLength,pMultiByteStr,(int)strlen(pMultiByteStr),NULL,NULL); HeapFree(GetProcessHeap(),0,pWideCharStr); return fOK;} int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ){ TCHAR szChar[10] = TEXT("ABCDEFG"); StringReverse(szChar,10); MessageBox(NULL,szChar, TEXT("RETURN"),MB_OK); return 0;}