【问题标题】:Convert Platform::Array<byte> to String将 Platform::Array<byte> 转换为字符串
【发布时间】:2013-01-17 05:43:45
【问题描述】:

从库中读取资源并返回 Platform::Array&lt;byte&gt;^ 的 C++ 函数

如何将其转换为 Platform::String 或 std::string

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

我需要来自data 的Platform::String

【问题讨论】:

  • 对于std::string,至少,我认为它与迭代器对构造函数兼容。
  • 文件的编码是什么?

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


【解决方案1】:

如果您的 Platform::Array&lt;byte&gt;^ data 包含一个 ASCII 字符串(正如您在对问题的评论中澄清的那样),您可以使用适当的 std::string 构造函数重载将其转换为 std::string(请注意,Platform::Array 提供类似 STL 的 @ 987654326@ 和 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&lt;const char*&gt; 从data-&gt;begin() 返回的byte * 指针转换为char * 指针(data-&gt;end() 类似),例如

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

【讨论】:

  • 就是这样。不能直接在 WinRT 中使用 STL 是个问题。
猜你喜欢
  • 2014-07-21
  • 2019-04-04
  • 2015-04-03
  • 1970-01-01
  • 2023-01-21
  • 2015-09-04
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
相关资源
最近更新 更多