我想知道是否有更简单的方法(更简练)转换const char_t*
到std::string_t
而不是下面更好的办法。到常量为wchar_t *转换为常量的std :: basic_string的<char_t>
编辑
#ifdef OS_WIN
#include <tchar.h>
typedef wchar_t char_t;
#define CHAR_WIDE
#else
typedef char char_t;
我想知道是否有更简单的方法(更简练)转换const char_t*
到std::string_t
而不是下面更好的办法。到常量为wchar_t *转换为常量的std :: basic_string的<char_t>
编辑
#ifdef OS_WIN
#include <tchar.h>
typedef wchar_t char_t;
#define CHAR_WIDE
#else
typedef char char_t;
从你有typedef
S,它归结要一个wchar_t const*
字符串转换为std::basic_string<wchar_t>
。你可以只通过该wchar_t const*
串的范围分成的std::basic_string<wchar_t>
构造:
wchar_t const *str = L"abcdefgh";
const std::basic_string<wchar_t> script_name(str, str + std::char_traits<wchar_t>::length(str));
你有三种常见的情况:
wchar_t*
必须指向ASCII值只有,并且您想要ASCII码为std::string
。wchar_t*
可能指向非ASCII字符,你想一个std::string
宽字符wchar_t*
可能指向非ASCII字符,你想在UTF-8 std::string
。通常情况3是最不可能在程序的其他地方引起问题的最好方式。但它也是最难处理的,因为您需要提供自己的例程来将宽字符转换为UTF-8。网上有很多C++源文件可用于这项工作。
为1:
std::string answer;
for(i=0;i<N;i++)
answer.push_back((char) wcharptr[i]);
为2,同样的代码,但是你需要模板回答你想要的宽型,显然删除char
演员。这就是生活变得困难的原因,为什么会不受欢迎,因为如果不小心的话,最终会出现大量不同类型的std::string
。
为3:
std::string answer;
for(i=0;i<N;i++)
{
char utf8[8];
int Nutf8;
int ii;
Nutf8 = widetoutf8(utf8, wcharptr[i]);
for(ii=0;ii<Nutf8;ii++)
answer.push_back(utf8[ii]);
}
,您必须提供widetoutf8()
或等同。
'typedef wchar_t char_t;'你确定吗? – deviantfan
看到编辑请... –
你想做什么?要将'std :: string'转换为'std :: wstring',你应该使用'std :: iconv' – PnotNP