Advertisement
Guest User

Untitled

a guest
Aug 16th, 2018
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. std::wstring _toUtf8(const std::string &str) {
  2.     auto getSymbolLen = [](const char *str, size_t n) {
  3.         if( 0xf0 == (0xf8&str[n]))
  4.             return 4;
  5.         else if( 0xe0 == (0xf0&str[n]))
  6.             return 3;
  7.         else if( 0xc0 == (0xe0&str[n]))
  8.             return 2;
  9.         return 1;
  10.     };
  11.  
  12.     const char *c_str = str.c_str();
  13.     wchar_t wChar;
  14.     char wcharSymbol[sizeof(wchar_t)] = {0};
  15.     std::vector<wchar_t> characters;
  16.  
  17.     for (size_t i = 0; i < str.size();) {
  18.         size_t symbLen = getSymbolLen(str.c_str(), i);
  19.  
  20.         memset(wcharSymbol, 0, sizeof(wchar_t));
  21.         for (size_t j = 0; j < symbLen; ++j)
  22.             wcharSymbol[j] = c_str[i+j];
  23.             for (size_t j = 0; j < sizeof(wchar_t); ++j) {
  24.                 *(((unsigned char*)(&wChar))+j)
  25.                     = wcharSymbol[j];
  26.             }
  27.  
  28.         i += symbLen;
  29.         characters.push_back(wChar);
  30.     }
  31.     return std::wstring(characters.begin(), characters.end());
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement