如何将 wchar_t[] 转换为basic_string<_Elem>?

How to convert wchar_t[] to basic_string<_Elem>?

本文关键字:lt string basic gt Elem 转换 wchar      更新时间:2023-10-16

我需要将一个项目从VS2003转换为VS2008。在以下代码中:

wchar_t wpom[30];
mbtowc(wpom, "olaboga", 10);
ati_dom::DOMString w = wpom;

我得到一个错误(在最后一行):无法从"wchar_t[30]"转换为"basic_string&lt_Elem>')。

我试图将其修改为:

wchar_t wpom[30];
mbtowc(wpom, "olaboga", 10);
std::basic_string<wchar_t> basic_wpom(wpom);
ati_dom::DOMString w = basic_wpom;

但我所遇到的只是另一个错误:无法从'std::basic_string&lt_Elem,_Traits,_Ax>'to'std::basic_string&lt_Elem>'

如何将wchar_t[]转换为basic_string&lt_Elem>而不是到basic_ string&lt_Elem,_Traits,_Ax>。。。?

只需通过构造函数直接使用std::wstring,该构造函数将指针指向第一个元素和数组的长度:

wchar_t warr[ 30 ];
// populate the array
std::wstring wstrTemp( &warr[ 0 ], 30 );

很抱歉没有回应-我自己发现了问题所在。

事实证明,DOMString是这样声明的:

typedef std :: basic_string< unsigned short > DOMString;

因此,简单地转换为无符号short就成功了:

ati_dom::DOMString w = (unsigned short *)wpom;