2013-03-26 2 views
0

У меня есть C++/CX Windows 8 приложения, и мне нужно сделать что-то похожее на следующее преобразование:C++/CX - Как преобразовать число, сохраненное как String^в байт?

String^ foo = "32"; 
byte bar = <the numeric value of foo> 

Как я могу преобразовать номер, хранящийся в строке^в тип байт? Я теряюсь без всякой магии C#, которую я обычно использую для достижения этого!

Заранее благодарим за помощь.

+0

Преобразовать в HEX затем сохранить его в массив байтов. – iamsleepy

+0

Пример? и это должно быть байт ... не массив байтов. – DaveUK

ответ

1

Вы попадаете в проблему, полагая, что C++/CX напоминает C#. Это совсем не так, это чистый C++ с некоторыми языковыми расширениями, облегчающими работу с типами WinRT. Это неправильное использование типа Platform :: String, это не класс строк общего назначения. Это уже покрывается стандартной библиотекой C++. Класс был намеренно искалечен, чтобы препятствовать использованию, которое вы имеете в виду. Это MSDN library article объясняет это хорошо:

Используйте класс Platform :: String, когда вы передаете строки и обратно методы в классах среды выполнения Windows, или когда вы взаимодействуете с другими компонентами среды выполнения Windows через двоичный интерфейс приложений (ABI). Класс Platform :: String предоставляет методы для нескольких общих операций с строками, но не предназначен для полнофункционального строкового класса. В своем модуле C++ используйте стандартные типы строк C++, такие как wstring для любой значительной обработки текста, а затем преобразуйте окончательный результат в Platform :: String ^, прежде чем передавать его в открытый или открытый интерфейс. Легко и эффективно конвертировать между wstring или wchar_t * и Platform :: String.

Так соответствующий код должен выглядеть следующим образом:

#include <string> 
... 
    std::wstring foo(L"32"); 
    auto bar = static_cast<unsigned char>(std::stol(foo)); 
+0

Спасибо Ханс - Я ценю ответ. Я думаю, вы считаете, что я тот, кто создает эту String^(в результате моего сжатого примера, чтобы более четко сформулировать проблему). Фактически, это значение передается мне WinRT API как String ^, и, к сожалению, у меня есть другой API, который должен получить значение в виде байта. В моем коде нет ничего, что я мог бы сделать по этому поводу, следовательно, необходимость в конверсии :) Извините, если сжатый пример смутил вещи - я хорошо знаком с CX/String^и использую его только при необходимости. Я преобразую его в wstring и пойду оттуда - спасибо! – DaveUK

Смежные вопросы