2017-08-13 44 views
1

我使用這些轉換編組 - 轉換的std ::矢量<char>到字符串^並且相反地

//矢量爲字符串2方法。

VectorToString(std::vector<char> data) 
{ 
    const char* newData = &data[0]; 
    String ^result; 
    result = marshal_as<String^>(newData); 
    return result; 
} 

//字符串到矢量

StringToVector(String^data) 
{ 
    marshal_context ctx; 
    IntPtr p = Marshal::StringToHGlobalAnsi(data); 
    const char* pAnsi = static_cast<const char*>(p.ToPointer()); 
    // use pAnsi 
    std::vector<char> result; 
    result.assign(pAnsi, pAnsi + strlen(pAnsi)); 
    Marshal::FreeHGlobal(p); 
    return result; 
} 

用2以上功能我可以做轉換。 你能告訴我這些轉換是否正確?或不? 實際上,這種方式將std :: vector轉換爲String是最好的方法嗎?

+0

:: string'? 'marshal_as'支持這些開箱即用。 'StringToHGlobalAnsi' /'FreeHGlobal'非常笨重,你可以'marshal_as '然後複製到矢量,如果你真的需要的話。 –

回答

1

你必須的#include msclr/marshal_cppstd.h

載體添加到字符串^

vector<char> data;// this is be initialize 
std::string myString = std::string(begin(data), end(data)); 
String^ result = marshal_as<String^>(myString); 

串^你爲什麼不使用`STD到矢量

marshal_context context; 
std::vector<char> myVector; 
const char* afterConvert = context.marshal_as<const char*>(data); 
myVector.assign(afterConvert , afterConvert + strlen(afterConvert)); 
相關問題