【问题标题】:c++ How to read a wchar_t* to into a std::wsting variable and print in HEXc++ 如何将 wchar_t* 读入 std::wsting 变量并以 HEX 打印
【发布时间】:2021-10-28 02:24:26
【问题描述】:

在 main 中,我有一个包含 unicode 字符的 wstring mystr。

int main()
{
   std::wcout << std::hex << 16 << endl;
   std::wstring mystr = L"abc - ";
   result = myfun(mystr);

   // here I want to print out my variable result 
   //std::wcout << hex<<result;
}

我还有一个函数 myfun ,它接受这个 wstring 并使用 incrementfun 函数打印出用括号括起来的每个字母(十六进制!)。这工作正常。

std::wstring myfun(std::wstring mystr){  
    wchar_t* ptrToCC = &mystr[0]    ;
    std::wstring Out    ;

    while (*ptrToCC != 0)
    {
        std::cout << "(" << std::hex << *ptrToCC << ")";       // first print is OK
        ptrToCC = incrementfun(ptrToCC);   
    }
    Out = "(" + std::hex + *ptrToCC + ")"                      // none of this not works
    Out = "(" + *ptrToCC + ")";
    Out  << "(" << std::hex << *ptrToCC << ")";

    return Out;
}

在第一次打印中,此函数打印出以下行,这很好

(61)(62)(63)(20)(2d)(20)

现在我想使用函数 myfun 将值返回给 main,我尝试将值读入变量以将其传回。但我无法将它们读入变量,因此我无法在 main.xml 中打印它。 我如何读取这些值并将它们以 HEX 形式打印出来?

【问题讨论】:

  • 使用 wstringstream.

标签: c++ hex wchar-t wstring


【解决方案1】:

使用std::wstringstream

编辑:编辑为使用range-based for loop

std::wstring myfun(std::wstring const& mystr) {  
    std::wstringstream out;

    for (auto const& ch : mystr)
        out << "(" << std::hex << static_cast<int>(ch) << ")";

    return out.str();
}

【讨论】:

  • 不需要指针。 auto myfun(std::wstring mystr) -&gt; std::wstring { std::wostringstream out; auto const w = sizeof(wchar_t) * 2; for (auto c : mystr) { out &lt;&lt; L"(" &lt;&lt; std::hex &lt;&lt; std::setw(w) &lt;&lt; std::setfill(L'0') &lt;&lt; std::uppercase &lt;&lt; +c &lt;&lt; L")"; } return out.str(); }
  • 您应该改用std::wostringstream,因为您不使用std::wstringstream 的输入功能。
猜你喜欢
  • 2020-01-24
  • 2016-10-02
  • 2012-05-14
  • 2015-02-11
  • 1970-01-01
  • 2011-01-30
  • 2012-01-17
相关资源
最近更新 更多