C++/CX Windows 8 アプリケーションがあり、次のような変換を行う必要があります。
String^ foo = "32";
byte bar = <the numeric value of foo>
String^ 内に格納されている数値をバイト型に変換するにはどうすればよいですか? これを達成するために通常使用する C# マジックがなければ、私は途方に暮れています!
これについて何か助けてくれてありがとう。
C++/CX Windows 8 アプリケーションがあり、次のような変換を行う必要があります。
String^ foo = "32";
byte bar = <the numeric value of foo>
String^ 内に格納されている数値をバイト型に変換するにはどうすればよいですか? これを達成するために通常使用する C# マジックがなければ、私は途方に暮れています!
これについて何か助けてくれてありがとう。
C++/CX が C# に似ていると思い込んでいると、問題が発生します。そうではありません。純粋な C++ であり、WinRT 型をより簡単に処理できるようにいくつかの言語拡張機能を備えています。これは、Platform::String 型の適切な使用法ではありません。汎用の文字列クラスではありません。これは、標準の C++ ライブラリで既にカバーされています。クラスは、あなたが考えている使用法を思いとどまらせるために意図的に不自由にされました。このMSDNライブラリの記事はそれをよく説明しています:
Windows ランタイム クラスのメソッドに文字列をやり取りする場合、またはアプリケーション バイナリ インターフェイス (ABI) の境界を越えて他の Windows ランタイム コンポーネントと対話する場合は、Platform::String クラスを使用します。Platform::String クラスは、いくつかの一般的な文字列操作のメソッドを提供しますが、完全な機能を備えた文字列クラスになるようには設計されていません。C++ モジュールでは、重要なテキスト処理に wstring などの標準 C++ 文字列型を使用し、パブリック インターフェイスとの間で渡す前に、最終結果を Platform::String^ に変換します。wstring または wchar_t* と Platform::String の間の変換は簡単で効率的です。
したがって、適切なコードは次のようになります。
#include <string>
...
std::wstring foo(L"32");
auto bar = static_cast<unsigned char>(std::stol(foo));