我正在尝试将char *字符串转换为wchar_t *。我已经多次询问过这个问题,没有解决/便携式答案/解决方案。
根据建议here,swprintf对我来说似乎是正确的解决方案,但我发现那里有两个版本!即:
我的程序看起来像这样:
const unsigned int LOCAL_SIZE = 256;
char* myCharString = "Hello world!";
wchar_t myWCharString[LOCAL_SIZE];
此时:
swprintf(myWCharString,LOCAL_SIZE,L"%hs",myCharString );
或:
swprintf(myWCharString,L"%hs",myCharString );
切换编译器(mingw 4.5.2< - > mingw 4.7.2)我确实得到了不同的版本,所以在一个例子中编译时出错! 我的问题:
修改
std::wstring_convert
似乎不适用于我的编译器(4.5.2和4.7.2,包括#include <locale>
如果我可以使用Boost格式库试图解决这个问题,我稍后会退房......
答案 0 :(得分:2)
由于我可以使用C ++,效率不是问题,我可以使用以下内容:
std::wstring(myCharString,myCharString+strlen(myCharString)).c_str()
如果需要加wchar_t*
,可能是这样的:
strcpy(myWCharString,std::wstring(myCharString,myCharString+strlen(myCharString)).c_str() );
经过测试 here。
来自basic_string constructor methods的文档:
first, last
Input iterators to the initial and final positions in a range.
The range used is [first,last), which includes all the characters
between first and last, including the character pointed by first but not
the character pointed by last.
The function template argument InputIterator shall be an input iterator type
that points to elements of a type convertible to charT.
If InputIterator is an integral type, the arguments are casted to the
proper types so that signature (5) is used instead.