C++ アプリケーションでネットワーキングに GameKit を使用しています (GameKit ネットワーキングを管理するための Objective-C クラスを作成しました) が、問題は、GameKit が NSString (C++ タイプではない) を使用してピア (peerID) を識別することです。私は GameKit を何度もテストしましたが、実際には peerID は常に数字です (例: 754569949)。peerID を字句的に uint32_t にキャストしても安全ですか? peerID が数字でない場合はありますか?
2 に答える
あなたの質問にはいくつかの部分があります。1)peerID
文字列から int を解析する。2) 内部 ID とpeerID
の間の関連付けを維持します。
C++ コードを取得peerID
し、それを変換して GameKit フレームワークで使用できるようにする必要がある場合は、 の内容について、公式ドキュメントが提供するNSString
以上の仮定を行うべきではありません。peerID
つまり、絶対に int を使用する必要がある場合は、peerID
s を内部識別子にマップする方法を提供してください。ただし、 を保持peerID
し、識別子に関連付けて、ID から に戻すことができるようにしますNSString
。
地図を作るのNSString -> uint32_t
も一つの方法かもしれません。
上記は、最初の文で言及した2番目の部分を主にカバーしています。peerID
次に、整数として解析するために保存するかどうかを考えてみましょう。
peerID
特定のが常に同じ にマップされることを保証する必要がある場合は、 が常に に適合する数値を表すuint32_t
と仮定するか、文字列のハッシュを計算します。どちらのアプローチにも問題があります。このような短いハッシュは、実際に使用すると衝突する可能性があります。一方、ある日、Apple がs を拡張して文字も含めることを決定すると、システムが停止する可能性があります。peerID
uint32_t
peerID
そのため、私はあなたのために決定を下すことはできません. peerID
おそらく C++ 文字列型に変換されたoriginal を使用する方法を見つけることを強くお勧めします。