读书人

windows核心编程-UNICODE跟ANSI间的相

发布时间: 2012-11-23 00:03:43 作者: rapoo

windows核心编程---UNICODE和ANSI间的相互转换

UNICODE和ANSI间的相互转换 ,主要通过以下两个函数进行转换:MultiByteToWideChar和WideCharToMultiByte。


MultiByteToWideChar


函数功能:该函数映射一个字符串到一个宽字符(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;}



读书人网 >编程

热点推荐