12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include "CharConvert.h"
- #pragma region 字符串编码处理
- #pragma region 字符转换
- char* CharConvert::StringTocharPtrA(string* sourceStr)
- {
- char* ch = (LPSTR)(LPCTSTR)sourceStr;
- return ch;
- }
- wchar_t* CharConvert::wstringToWchar_tPtrW(wstring ws)
- {
- wchar_t* ptr = _wcsdup(ws.c_str());
- return ptr;
- }
- char* CharConvert::GetWstringToCharPtr(wstring ws)
- {
- wchar_t* ptr = _wcsdup(ws.c_str());
- char* ch = CharConvert::GetMultiByteW(ptr);
- return ch;
- }
- #pragma endregion
- #pragma region Unicode和ANSI
-
- wstring CharConvert::GetWideCharW(char* multiByte)
- {
- char* ch = multiByte;
- int len = MultiByteToWideChar(CP_ACP, 0, ch, -1, NULL, 0);
- wchar_t* wch = new wchar_t[len];
- MultiByteToWideChar(CP_ACP, 0, ch, -1, wch, len);
- return wch;
- }
- wstring CharConvert::GetWideCharW(string* multiByte)
- {
- //(LPSTR)(LPCTSTR)会乱码,之后会在处理所有转换字符的问题
- const char* ch2 = /*(LPSTR)(LPCTSTR)*/multiByte->data();
- char* ch = (char*)ch2;
- wstring wch = GetWideCharW(ch);
- return wch;
- }
- char* CharConvert::GetMultiByteW(wchar_t* wideChar)
- {
- char* multiByte;
- int iwstrLen = WideCharToMultiByte(CP_ACP, 0, wideChar, -1, 0, 0, 0, 0);
- multiByte = new char[iwstrLen + 1];
- memset(multiByte, 0, sizeof(char) * (iwstrLen + 1));
- WideCharToMultiByte(CP_ACP, 0, wideChar, -1, multiByte, iwstrLen, 0, 0);
- return multiByte;
- }
- char* CharConvert::GetMultiByteUTF8W(wchar_t* wideChar)
- {
- char* multiByte;
- int iwstrLen = WideCharToMultiByte(CP_UTF8, 0, wideChar, -1, 0, 0, 0, 0);
- multiByte = new char[iwstrLen + 1];
- memset(multiByte, 0, sizeof(char) * (iwstrLen + 1));
- WideCharToMultiByte(CP_UTF8, 0, wideChar, -1, multiByte, iwstrLen, 0, 0);
- return multiByte;
- }
- char* CharConvert::GetMultiByteW(wstring wideStr)
- {
- wchar_t* ptr = _wcsdup(wideStr.c_str());
- char* multiByte = GetMultiByteW(ptr);
- return multiByte;
- }
- std::wstring CharConvert::ReplaceSubStrW(wstring sourceStr, const wstring& oldSubStr, const wstring& newSubStr)
- {
- wstring strRet = sourceStr;
- size_t pos = 0;
- int l_count = 0;
- int count = -1;
- if (-1 == count) // replace all
- count = strRet.size();
- while ((pos = strRet.find(oldSubStr, pos)) != wstring::npos)
- {
- strRet.replace(pos, oldSubStr.size(), newSubStr);
- if (++l_count >= count) break;
- pos += newSubStr.size();
- }
- return strRet;
- }
- #pragma endregion
- #pragma endregion
|