You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何将wchar_t*内容存入std::wstring并以十六进制格式打印

解决方案

错误原因

你的代码存在三个核心问题:

  • std::hex是IO流专属的格式操纵符,不能直接和字符串、wchar_t做算术加法
  • std::wstring没有重载<<运算符,无法直接用该运算符拼接内容
  • 遍历循环结束后ptrToCC已经指向字符串末尾的空终止符,此时取值拼接只能拿到空值

修正方法

使用std::wostringstream(宽字符字符串输出流)完成格式化拼接,它可以复用IO流的格式化能力,最终直接转换为std::wstring返回。

第一步:引入必要头文件

在代码顶部添加:

#include <sstream> // 字符串流头文件

第二步:修正myfun函数实现

std::wstring myfun(std::wstring mystr){  
    wchar_t* ptrToCC = &mystr[0];
    // 声明宽字符输出流,用于格式化拼接结果
    std::wostringstream oss;
    std::wstring Out;

    while (*ptrToCC != 0)
    {
        // 同时完成控制台打印和结果拼接,此处换成wcout避免部分编码环境下乱码
        std::wcout << L"(" << std::hex << *ptrToCC << L")";
        oss << L"(" << std::hex << *ptrToCC << L")";
        ptrToCC = incrementfun(ptrToCC);   
    }
    // 将流中拼接好的内容转为wstring返回
    Out = oss.str();
    return Out;
}

第三步:修正main函数逻辑

int main()
{
   std::wcout << std::hex << 16 << std::endl;
   std::wstring mystr = L"abc - ";
   // 声明result的类型为std::wstring
   std::wstring result = myfun(mystr);

   // 打印返回结果
   std::wcout << std::endl << result << std::endl;
   return 0;
}

运行效果

控制台会输出两行相同的结果,第一行是myfun内的实时打印,第二行是main中打印的返回值:

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

内容的提问来源于stack exchange,提问作者user3443063

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:39:04