C # — C ++ / CX: конвертировать std :: string в Platform :: String ^

Есть ли простой способ (одной строкой кода было бы здорово) преобразовать std :: string в Platform :: String ^ в C ++ / CX?

я нашел как сделать это по-другому(Строка ^ в строку), но ничего для этого.

Что-то вроде :

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

(В примере это бессмысленно, но когда вы работали с std :: string в c ++ и хотите отправить его в некоторый код C #, это имеет больше смысла)

2

Решение

Нет прямого std::string в std::wstring конвертация в настоящее время возможна.

Тем не менее, мы можем сделать окольную конверсию из std::string в std::wstringзатем из std::wstring в Platform::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::string в std::wstring преобразование.

1

Другие решения

У меня метод работает

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));
}
0

Если вам в преобразовании не нравится быть ограниченным Basic Latin (Unicode block), как в моем случае необходимость ввода, это работает:

#include <sstream>

Platform::String^ StdStringToPlatformString(std::string str)
{
std::wstringstream wss;
wss << str.c_str();
return ref new Platform::String(wss.str().c_str());
}
0

Так что в основном ответ «нет»: это сложнее. Вам нужно сначала преобразовать std :: string в std :: wstring, а затем использовать ответ пользователя user1 (преобразовать std :: wstring в Platform :: String ^).
Для преобразования строки в строку вы можете проверить этот другой вопрос (что не работает для меня, но как бы то ни было, мне просто нужно пойти на более глубокое преобразование).

(Я поместил некоторый код, но мне сказали, что делать это так ужасно, так как я просто делаю это для отладки и все равно удалю, мне все равно, но я не хочу давать антисоветы, поэтому я удалил код)

-1
По вопросам рекламы [email protected]