2013-02-01 47 views
3

一個在C++函數從讀取資源,並返回Platform::Array<byte>^轉換平臺::陣列<byte>爲String

庫我如何轉換這爲Platform::Stringstd::string

BasicReaderWriter^ m_basicReaderWriter = ref new BasicReaderWriter() 
Platform::Array<byte>^ data = m_basicReaderWriter ("file.txt") 

我需要一個Platform::Stringdata

+0

對於'std :: string',至少我會想象它與迭代器對構造函數兼容。 – chris

+0

該文件的編碼是什麼? – svick

+0

這就是簡單的ascii – ppaulojr

回答

4

如果您的Platform::Array<byte>^ data包含一個ASCII字符串(如您在您的問題的評論澄清),您可以將其轉換爲std::string個使用適當std::string構造函數重載(注意:Platform::Array提供STL樣begin()end()方法):

// Using std::string's range constructor 
std::string s(data->begin(), data->end()); 

// Using std::string's buffer pointer + length constructor 
std::string s(data->begin(), data->Length); 

不像std::stringPlatform::String包含的Unicode UTF-16wchar_t)字符串,所以你需要從一個轉換你的包含ANSI字符串到Unicode字符串的原始字節數組。您可以使用ATL conversion helperCA2W(其中包含對Win32 API MultiByteToWideChar()的調用)進行此轉換。 然後你可以使用Platform::String構造以原始UTF-16字符指針:

Platform::String^ str = ref new String(CA2W(data->begin())); 

注: 我目前還沒有VS2012用,所以我還沒有與C++/CX測試此代碼編譯器。如果你得到一些參數匹配的錯誤,你可能要考慮reinterpret_cast<const char*>從由data->begin()返回到char *指針byte *指針(和data->end()類似),例如轉換

std::string s(reinterpret_cast<const char*>(data->begin()), data->Length); 
+0

就是這樣。不能直接在WinRT中使用STL是一件複雜的事情。 – ppaulojr

相關問題