gpt4 book ai didi

c++ - 如何在 C++ 中将单字节字符串转换为宽字符串?

转载 作者:行者123 更新时间:2023-11-28 03:26:12 30 4
gpt4 key购买 nike

我知道编码并且输入字符串是 100% 单字节,没有像 utf 等花哨的编码。我只想根据已知编码将其转换为 wchar_t* 或 wstring。使用什么功能? btowc() 然后循环?也许字符串对象中有一些有用的东西。有很多例子,但都是针对“多字节”或带有 btowc() 的奇特循环,它们仅显示如何在屏幕上显示确实此功能有效的输出,我还没有看到任何严肃的例子如何处理此类缓冲区情况下,宽字符总是比单个字符字符串大 2 倍吗?

最佳答案

试试这个 template .它对我很有帮助。

(作者不详)

/* string2wstring.h */
#pragma once

#include <string>
#include <vector>
#include <locale>
#include <functional>
#include <iostream>

// Put this class in your personal toolbox...
template<class E,
class T = std::char_traits<E>,
class A = std::allocator<E> >

class Widen : public std::unary_function<
const std::string&, std::basic_string<E, T, A> >
{
std::locale loc_;
const std::ctype<E>* pCType_;

// No copy-constructor, no assignment operator...
Widen(const Widen&);
Widen& operator= (const Widen&);

public:
// Constructor...
Widen(const std::locale& loc = std::locale()) : loc_(loc)
{
#if defined(_MSC_VER) && (_MSC_VER < 1300) // VC++ 6.0...
using namespace std;
pCType_ = &_USE(loc, ctype<E> );
#else
pCType_ = &std::use_facet<std::ctype<E> >(loc);
#endif
}

// Conversion...
std::basic_string<E, T, A> operator() (const std::string& str) const
{
typename std::basic_string<E, T, A>::size_type srcLen =
str.length();
const char* pSrcBeg = str.c_str();
std::vector<E> tmp(srcLen);

pCType_->widen(pSrcBeg, pSrcBeg + srcLen, &tmp[0]);
return std::basic_string<E, T, A>(&tmp[0], srcLen);
}
};

// How to use it...
int main()
{
Widen<wchar_t> to_wstring;
std::string s = "my test string";
std::wstring w = to_wstring(s);
std::wcout << w << L"\n";
}

关于c++ - 如何在 C++ 中将单字节字符串转换为宽字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892995/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com