A在C ++中有一个函数来自一个读取资源并返回Platform::Array<byte>^
如何将其转换为Platform::String
或std::string
BasicReaderWriter^ m_basicReaderWriter = ref new BasicReaderWriter()
Platform::Array<byte>^ data = m_basicReaderWriter ("file.txt")
我需要Platform::String
data
答案 0 :(得分:4)
如果您的Platform::Array<byte>^ data
包含ASCII字符串(正如您在问题评论中所阐明的那样),您可以使用正确的std::string
构造函数重载将其转换为std::string
(请注意Platform::Array
1}}提供类似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::string
不同,Platform::String
包含 Unicode UTF-16 (wchar_t
)字符串,因此您需要从包含ANSI字符串的原始字节数组进行转换到Unicode字符串。您可以使用ATL conversion helper类CA2W
(包装对Win32 API MultiByteToWideChar()
的调用)执行此转换。
然后你可以使用Platform::String
构造函数来获取原始的UTF-16字符指针:
Platform::String^ str = ref new String( CA2W( data->begin() ) );
注意:强>
我目前没有VS2012可用,所以我没有用C ++ / CX编译器测试这段代码。如果您得到一些匹配错误的参数,您可能需要考虑将reinterpret_cast<const char*>
从byte *
返回的data->begin()
指针转换为char *
指针(类似于{{1} }}),例如
data->end()