C ++ / CX:将std :: string转换为Platform :: String ^

时间:2015-10-07 11:39:40

标签: c# c++ c++-cx windows-rt

有没有一种简单的方法(一行代码很酷)将àstd:: string转换为C ++ / CX中的Platform :: String ^?

我发现how to do it the other way(字符串^到字符串)但没有找到这个。

类似的东西:

std::string str = "Hello World";
Platform::String^ p_str = convertFromString(str);

(在示例中它没有意义,但是当您在c ++中使用std :: string并且想要将其发送到某些C#代码时更有意义)

4 个答案:

答案 0 :(得分:1)

目前无法直接std::string转换为std::wstring转化。

但是,我们可以执行从std::stringstd::wstring,然后从std::wstringPlatform::String的环形交叉转换,如下所示:

#include <locale>
#include <codecvt>
#include <string>

Platform::String^ stringToPlatformString(std::string inputString) {
  std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
  std::wstring intermediateForm = converter.from_bytes(inputString);
  Platform::String^ retVal = ref new Platform::String(intermediateForm.c_str());

  return retVal;
}

有关std::stringstd::wstring转化的详情,请参阅this question

答案 1 :(得分:0)

该方法适用于我

Platform::String ^ convertFromString(const std::string & input)
{
    std::wstring w_str = std::wstring(input.begin(), input.end());
    const wchar_t* w_chars = w_str.c_str();

    return (ref new Platform::String(w_chars));
}

答案 2 :(得分:0)

如果您不希望局限于基本拉丁语(Unicode块),例如我需要æøå,则可以这样做:

a

答案 3 :(得分:-1)

基本上答案是否定的:它更复杂。您需要先在std :: wstring中转换std :: string,然后使用user1的答案(将std :: wstring转换为Platform :: String ^)。 对于字符串到wstring的转换,您可以检查this other question(这对我不起作用,但无论如何,我只需要进行更深入的转换)。

(我已经放了一些代码,但被告知这样做是很糟糕的,因为我只是为了调试而做,并且无论如何都要删除它我不在乎但我不想给出反建议所以我删除了那段代码)