将Platform :: Array <byte>转换为String </byte>

时间:2013-02-01 20:18:21

标签: c++ string windows-runtime c++-cx

A在C ++中有一个函数来自一个读取资源并返回Platform::Array<byte>^

的库

如何将其转换为Platform::Stringstd::string

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

我需要Platform::String

中的data

1 个答案:

答案 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 helperCA2W(包装对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()