2016-05-05 113 views
0

如何將字符串轉換爲WString。字符串到Wstring C++ Visual Studio

之前可以轉換EscapeXML我需要首先將字符串轉換爲wstring。

例子:

我有一個字符串值= 「& & &」,那麼我想這個字符串轉換爲wstring的。

我的源代碼:

string escapeXML(const std::string & value) 
{ 
    // Here 
    CA2W ca2w(value.c_str()); 
    wstring value = ca2w; 

    int output_size = EscapeXML(value.c_str(), value.length(), 0, 0, ATL_ESC_FLAG_ATTR); 

    std::wstring testout; 
    testout.resize(output_size); 
    EscapeXML(value.c_str(), value.length(), &testout[0], output_size, ATL_ESC_FLAG_ATTR); 

    using convert_type = std::codecvt_utf8<wchar_t>; 
    std::wstring_convert<convert_type, wchar_t> converter; 

    string converted_str = converter.to_bytes(testout); 

    return converted_str; 
} 

int main() 
{ 

std::string test = " & & & "; 
cout << escapeXML(test) << '/n'; 

    return 0; 
} 

我的輸出:

C2082: redefinition of formal parameter 'value' 
IntelliSense: argument of type "const char *" is incompatible with parameter of type "const wchar_t *" 
+0

沒有運行你的代碼,我看不到你的問題/問題?你在期待什麼,你看到了什麼? –

+0

我現在更新案例。我希望你能理解這個問題:) – Skydreampower

+0

感謝您的建議@computerfreaker。 – Skydreampower

回答

0

我現在發現了這個問題。問題是關於價值的重複。

我已經在字符串中調用了值,並在wstring中調用了值。這種方式不應該工作。我改變了評估名稱,這就是解決方案。謝謝。

#include "stdafx.h" 
#include "atlenc.h" 
#include <string> 
#include <iostream> 
#include <codecvt> 
using namespace std; 


string escapeXML(const std::string & value) 
{ 
    CA2W ca2w(value.c_str()); 
    wstring value2 = ca2w; 
    int output_size = EscapeXML(value2.c_str(), value.length(), 0, 0, ATL_ESC_FLAG_ATTR); 

    std::wstring testout; 
    testout.resize(output_size); 
    EscapeXML(value2.c_str(), value2.length(), &testout[0], output_size, ATL_ESC_FLAG_ATTR); 

    using convert_type = std::codecvt_utf8<wchar_t>; 
    std::wstring_convert<convert_type, wchar_t> converter; 

    string converted_str = converter.to_bytes(testout); 

    return converted_str; 
} 



int main() 
{ 

    std::string test = " Bayern & Münschen"; 
    std::string test2 = " \" \" \" "; 
    std::string test3 = " ' ' ' "; 
    std::string test4 = "< < <"; 
    std::string test5 = " > > >"; 

    cout << escapeXML(test); 
    cout << escapeXML(test2) << '/n'; 
    cout << escapeXML(test3) << '/n'; 
    cout << escapeXML(test4) << '/n'; 
    cout << escapeXML(test5) << '/n'; 

    return 0; 
}