Могу ли я привести peerID GameKit к uint32_t

Я использую GameKit для работы в сети в своем приложении C ++ (создал класс Objective-C для управления сетью GameKit), но проблема в том, что GameKit использует NSString (не тип C ++) для идентификации пиров (peerID). Я много тестировал GameKit, и в моей практике peerID это всегда число (например, 754569949). Безопасно ли лексически приводить peerID к uint32_t? Есть ли случаи, когда peerID не является числом?

0

Решение

Я вижу пару частей на ваш вопрос: 1) парсинг int от peerID строка; 2) поддержание связи между вашими внутренними идентификаторами и peerIDs.

Если вам нужно получить peerID в ваш код C ++, а затем сможете преобразовать его обратно в NSString для использования с каркасом GameKit, вы не должны делать больше предположений о peerIDсодержание, чем официальные документы предоставляют.

Другими словами, если вам абсолютно необходимо использовать целые, укажите способ отображения peerIDс вашими внутренними идентификаторами. Но продолжай peerIDвокруг и связаны с вашими идентификаторами, чтобы иметь возможность отображать другой путь — от вашего идентификатора обратно NSString,

Составление карты NSString -> uint32_t может быть один из способов сделать это.

Вышесказанное в основном охватывает вторую часть, о которой я упоминал в первом предложении. Теперь давайте посмотрим, если это сохранить для анализа peerID как целое число

Если вам нужно гарантировать, что конкретный peerID всегда будет отображаться на то же uint32_tСчитаете peerID представляет собой число, которое всегда будет вписываться в uint32_tили вы вычисляете хеш строки. Есть проблемы с обоими подходами. Такой короткий хэш может иметь коллизии в реальном использовании. С другой стороны, ваша система может однажды затормозить, когда Apple решит продлить peerIDs также включать буквы.

Поэтому я не могу принять решение за вас, я просто попытался изложить возможности, которые вы могли бы рассмотреть. Я настоятельно рекомендую вам найти способ использовать оригинальные peerID, возможно преобразованный в строковый тип C ++.

0

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

Проблема в том, что для совместимости с другими частями кода мне нужно идентифицировать клиентов по целому, а не по строке

Если вам нужно получить целое число из этих строк, при отсутствии какой-либо гарантии это всегда будет число, просто создайте таблицу известных идентификаторов и присвойте им индексы.

57483829 => 0
42937422 => 1
3333fghh => 2

Вы могли бы использовать два std::maps для быстрого преобразования между двумя представлениями.

Просто конвертируйте NSString к строке, которая является более дружественной к C ++. В качестве альтернативы, сначала выполните перевод и поддерживайте индексы в Objective-C, и вы можете дать своему коду C ++ индекс.

0

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