天天看点

C++ sqllite 转换函数

void CSQLite::Char2wstring(const char* AC, wstring& wstr)

{

    wchar_t *pStr;

    int len = MultiByteToWideChar(CP_ACP, 0, AC, (int)strlen(AC), NULL, 0);

    pStr = new wchar_t[len + 1];

    MultiByteToWideChar(CP_ACP, 0, AC, (int)strlen(AC), pStr, len);

    pStr[len] = '\0';

    wstr = wstring(pStr);

    delete pStr;

}

void CSQLite::Wchar_t2string(const wchar_t* WC, string& str)

{

    char *pStr;

    int len = WideCharToMultiByte(CP_ACP, 0, WC, (int)wcslen(WC), NULL, 0, NULL, NULL);

    pStr = new char[len + 1];

    WideCharToMultiByte(CP_ACP, 0, WC, (int)wcslen(WC), pStr, len, NULL, NULL);

    pStr[len] = '\0';

    str = string(pStr);

    delete pStr;

}

void CSQLite::UnicodeToUTF8(wstring &wstr, string &str)

{

    int len;

    len = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);

    char *szUtf8 = (char*)malloc(len + 1);

    memset(szUtf8, 0, len + 1);

    WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, szUtf8, len, NULL, NULL);

    str = string(szUtf8);

    delete[] szUtf8;

}

void CSQLite::UTF8ToUnicode(string &str, wstring &wstr)

{

    int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, str.c_str(), strlen(str.c_str()), NULL, 0);

    wchar_t* wszString = new wchar_t[wcsLen + 1];

    ::MultiByteToWideChar(CP_UTF8, NULL, str.c_str(), strlen(str.c_str()), wszString, wcsLen);

    wszString[wcsLen] = '\0';

    wstr = wstring(wszString);

    delete[] wszString;

}