{"id":2246,"date":"2022-03-07T06:40:35","date_gmt":"2022-03-06T22:40:35","guid":{"rendered":"https:\/\/guerilla.ddns.net\/wp\/?p=2246"},"modified":"2025-08-22T22:30:38","modified_gmt":"2025-08-22T14:30:38","slug":"stdstring-stdwstring-converting","status":"publish","type":"post","link":"https:\/\/guerilla.ddns.net\/wp\/?p=2246","title":{"rendered":"C\/C++ std::string\/std::wstring converting"},"content":{"rendered":"<p>myconvert.h<\/p>\n<pre><code class=\"language-cpp\" data-line=\"\">#pragma once\n\nstd::string wstring_to_string(const wchar_t* in);                   \/\/ wchar_t* -&gt; UTF8 string\nstd::wstring string_to_wstring(const char* in);                     \/\/ UTF8 char* -&gt; wstring\nvoid string_to_wstring(std::wstring &amp;out, const std::string &amp;in);   \/\/ UTF8 string -&gt; wstring\nstd::wstring string_to_wstring(const std::string &amp;in);              \/\/ UTF8 string -&gt; wstring<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>myconvert.cpp<\/p>\n<pre><code class=\"language-c\" data-line=\"\">#include &lt;string&gt;\n#include &quot;myconvert.h&quot;\n\n\/\/ wchar_t* -&gt; UTF8 string\n\/\/\nstd::string wstring_to_string(const wchar_t* in)\n{\n\tstd::string out;\n\tunsigned int codepoint;\n\twhile (*in != 0)\n\t{\n\t\tif (*in &gt;= 0xd800 &amp;&amp; *in &lt;= 0xdbff)\n\t\t{\n\t\t\tcodepoint = ((*in - 0xd800) &lt;&lt; 10) + 0x10000;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (*in &gt;= 0xdc00 &amp;&amp; *in &lt;= 0xdfff)\n\t\t\t\tcodepoint |= *in - 0xdc00;\n\t\t\telse\n\t\t\t\tcodepoint = *in;\n\t\t\tif (codepoint &lt;= 0x7f)\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(codepoint));\n\t\t\t}\n\t\t\telse if (codepoint &lt;= 0x7ff)\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0xc0 | ((codepoint &gt;&gt; 6) &amp; 0x1f)));\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0x80 | (codepoint &amp; 0x3f)));\n\t\t\t}\n\t\t\telse if (codepoint &lt;= 0xffff)\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0xe0 | ((codepoint &gt;&gt; 12) &amp; 0x0f)));\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0x80 | ((codepoint &gt;&gt; 6) &amp; 0x3f)));\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0x80 | (codepoint &amp; 0x3f)));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0xf0 | ((codepoint &gt;&gt; 18) &amp; 0x07)));\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0x80 | ((codepoint &gt;&gt; 12) &amp; 0x3f)));\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0x80 | ((codepoint &gt;&gt; 6) &amp; 0x3f)));\n\t\t\t\tout.append(1, static_cast&lt;char&gt;(0x80 | (codepoint &amp; 0x3f)));\n\t\t\t}\n\t\t}\n\t\t++in;\n\t}\n\treturn out;\n}\n\n\/\/ UTF8 char* -&gt; wstring\n\/\/\nstd::wstring string_to_wstring(const char* in)\n{\n\tstd::wstring out;\n\tunsigned int codepoint;\n\twhile (*in != 0)\n\t{\n\t\tunsigned char ch = static_cast&lt;unsigned char&gt;(*in);\n\t\tif (ch &lt;= 0x7f)\n\t\t\tcodepoint = ch;\n\t\telse if (ch &lt;= 0xbf)\n\t\t\tcodepoint = (codepoint &lt;&lt; 6) | (ch &amp; 0x3f);\n\t\telse if (ch &lt;= 0xdf)\n\t\t\tcodepoint = ch &amp; 0x1f;\n\t\telse if (ch &lt;= 0xef)\n\t\t\tcodepoint = ch &amp; 0x0f;\n\t\telse\n\t\t\tcodepoint = ch &amp; 0x07;\n\t\t++in;\n\t\tif (((*in &amp; 0xc0) != 0x80) &amp;&amp; (codepoint &lt;= 0x10ffff))\n\t\t{\n\t\t\tif (sizeof(wchar_t) &gt; 2)\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;wchar_t&gt;(codepoint));\n\t\t\t}\n\t\t\telse if (codepoint &gt; 0xffff)\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;wchar_t&gt;(0xd800 + (codepoint &gt;&gt; 10)));\n\t\t\t\tout.append(1, static_cast&lt;wchar_t&gt;(0xdc00 + (codepoint &amp; 0x03ff)));\n\t\t\t}\n\t\t\telse if (codepoint &lt; 0xd800 || codepoint &gt;= 0xe000)\n\t\t\t{\n\t\t\t\tout.append(1, static_cast&lt;wchar_t&gt;(codepoint));\n\t\t\t}\n\t\t}\n\t}\n\treturn out;\n}\n\n\/\/ UTF8 string -&gt; wstring\n\/\/\nvoid string_to_wstring(std::wstring &amp;out, const std::string &amp;in)\n{\n\tstd::wstring w(in.begin(), in.end());\n\n\tout = w;\n}\n\n\/\/ UTF8 string -&gt; wstring\n\/\/\nstd::wstring string_to_wstring(const std::string &amp;in)\n{\n\tstd::wstring w(in.begin(), in.end());\n\n\treturn w;\n}\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><!--\nmyconvert.h\n<iframe class=code src=\"\/src\/myconvert.h\"><\/iframe>\n&nbsp;\nmyconvert.cpp\n<iframe class=code src=\"\/src\/myconvert.cpp\"><\/iframe>\n--><br \/>\n&nbsp;<\/p>\n<p>&nbsp;<br \/>\n#C++ #UTF-8 #char #wchar_t #wstring #convert<\/p>\n","protected":false},"excerpt":{"rendered":"<p>myconvert.h #pragma once std::string wstring_to_string( [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[212],"tags":[85,27],"class_list":["post-2246","post","type-post","status-publish","format-standard","hentry","category-coding","tag-c","tag-coding"],"_links":{"self":[{"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2246"}],"version-history":[{"count":20,"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2246\/revisions"}],"predecessor-version":[{"id":3384,"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2246\/revisions\/3384"}],"wp:attachment":[{"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/guerilla.ddns.net\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}