<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433737&amp;view=findpost&amp;p=3888306</guid>
        <pubDate>Sun, 19 Mar 2023 19:02:57 +0000</pubDate>
        <title>Как переменной wstring присвоить значение char*?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433737&amp;view=findpost&amp;p=3888306</link>
        <description><![CDATA[Qraizer: Преобразование из char в wchar_t не стандартизовано, т.к. зависит от национальных предпочтений пользователя, а не формальных правил языка программирования. Как и в случае WinAPI, тебе следует самому определить правила преобразования, на основе std::locale, например. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2023-03-19T22:17:36+03:00">19.03.23, 19:17</time></span></span><br>
В качестве быстрого старта могу предложить что-то типа:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">/* Преобразование UNICODE в ANSI с учётом локали.</div><div class="code_line">&nbsp;&nbsp; Параметры: str - исходная UNICODE-строка;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ct &nbsp;- фасет std::ctype&#60;wchar_t&#62; из требуемой локали;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;для русской локали должен браться из std::locale(&quot;russian&quot;).</div><div class="code_line">&nbsp;&nbsp; Возвращает результирующую ANSI-строку str.</div><div class="code_line">*/</div><div class="code_line">std::string toNarrow(const std::wstring&amp; str, const std::ctype&#60;wchar_t&#62;&amp; ct =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::use_facet&#60;std::ctype&#60;wchar_t&#62; &#62;(std::locale::classic()))</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;std::vector&#60;char&#62; buf(str.length());</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (!buf.empty()) ct.narrow(str.data(), str.data()+buf.size(), &#39;\a&#39;, &amp;buf[0]);</div><div class="code_line">&nbsp;&nbsp;return std::string(buf.begin(), buf.end());</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">/* Преобразование ANSI в UNICODE с учётом локали.</div><div class="code_line">&nbsp;&nbsp; Параметры: str - исходная ANSI-строка;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ct &nbsp;- фасет std::ctype&#60;wchar_t&#62; из требуемой локали;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;для русской локали должен браться из std::locale(&quot;russian&quot;).</div><div class="code_line">&nbsp;&nbsp; Возвращает результирующую UNICODE-строку str.</div><div class="code_line">*/</div><div class="code_line">std::wstring toWide(const std::string&amp; str, const std::ctype&#60;wchar_t&#62;&amp; ct =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::use_facet&#60;std::ctype&#60;wchar_t&#62; &#62;(std::locale::classic()))</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;std::vector&#60;wchar_t&#62; buf(str.length());</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (!buf.empty()) ct.widen(str.data(), str.data()+buf.size(), &amp;buf[0]);</div><div class="code_line">&nbsp;&nbsp;return std::wstring(buf.begin(), buf.end());</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>По умолчанию будут использоваться стандартные правила, неработающие для нелатиницы. Использовать для русской локали можно как-нибудь вот так:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const std::locale &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loc (&quot;rus&quot;); &nbsp; &nbsp; &nbsp; &nbsp;// под виндой этого хватит, в линухе другие имена локалей, что-то типа &quot;ru_RU.UTF8&quot;</div><div class="code_line">const std::ctype&#60;wchar_t&#62;&amp; ct &nbsp; = std::use_facet&#60;std::ctype&#60;wchar_t&#62; &#62;(loc);</div><div class="code_line">/* ... */</div><div class="code_line">std::wstring strarg1 = toWide(args-&#62;args[0], ct);</div><div class="code_line">std::cout &#60;&#60; toNarrow(L&quot;Первый параметр &quot; + strarg1, ct);</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=433737&amp;view=findpost&amp;p=3888262</guid>
        <pubDate>Sun, 19 Mar 2023 10:44:07 +0000</pubDate>
        <title>Как переменной wstring присвоить значение char*?</title>
        <link>https://forum.sources.ru/index.php?showtopic=433737&amp;view=findpost&amp;p=3888262</link>
        <description><![CDATA[izumov: Имеется код<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::wstring strarg1 = args-&#62;args[0];</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::wstring strarg2 = args-&#62;args[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::wstring strresult = strarg1 + strarg2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int i = strresult.length();</div></ol></div></div></div></div><br>
При попытке присваивания переменым strarg1,strarg2 значений получаю ошибкуE0415 не существует подходящего конструктора для преобразования из &quot;char *&quot; в &quot;std::basic_string&lt;wchar_t, std::char_traits&lt;wchar_t&gt;, std::allocator&lt;wchar_t&gt;&gt;&quot; Probamysqludf H:&#092;studyprojects&#092;MySqlLib&#092;MySQLPRoba1&#092;Probamysqlud f&#092;dllmain.cpp 46<br>
Как мне изменить код чтобы он скомпилировался?]]></description>
        <author>izumov</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	