0

C++ アプリケーションでネットワーキングに GameKit を使用しています (GameKit ネットワーキングを管理するための Objective-C クラスを作成しました) が、問題は、GameKit が NSString (C++ タイプではない) を使用してピア (peerID) を識別することです。私は GameKit を何度もテストしましたが、実際には peerID は常に数字です (例: 754569949)。peerID を字句的に uint32_t にキャストしても安全ですか? peerID が数字でない場合はありますか?

4

2 に答える 2

0

あなたの質問にはいくつかの部分があります。1)peerID文字列から int を解析する。2) 内部 ID とpeerIDの間の関連付けを維持します。

C++ コードを取得peerIDし、それを変換して GameKit フレームワークで使用できるようにする必要がある場合は、 の内容について、公式ドキュメントが提供するNSString以上の仮定を行うべきではありません。peerID

つまり、絶対に int を使用する必要がある場合は、peerIDs を内部識別子にマップする方法を提供してください。ただし、 を保持peerIDし、識別子に関連付けて、ID から に戻すことができるようにしますNSString

地図を作るのNSString -> uint32_tも一つの方法かもしれません。

上記は、最初の文で言及した2番目の部分を主にカバーしています。peerID次に、整数として解析するために保存するかどうかを考えてみましょう。

peerID特定のが常に同じ にマップされることを保証する必要がある場合は、 が常に に適合する数値を表すuint32_tと仮定するか、文字列のハッシュを計算します。どちらのアプローチにも問題があります。このような短いハッシュは、実際に使用すると衝突する可能性があります。一方、ある日、Apple がs を拡張して文字も含めることを決定すると、システムが停止する可能性があります。peerIDuint32_tpeerID

そのため、私はあなたのために決定を下すことはできません. peerIDおそらく C++ 文字列型に変換されたoriginal を使用する方法を見つけることを強くお勧めします。

于 2013-05-01T22:44:14.347 に答える