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
相关产品推荐
相关产品推荐

