2013-05-01 2 views
0

내 C++ 응용 프로그램에서 네트워킹 용 GameKit을 사용하고 있습니다 (GameKit 네트워킹 관리를위한 Objective-C 클래스 생성).하지만 GameKit은 NSString (C++ 유형 아님)을 사용하여 동료를 식별합니다 (peerID). 나는 GameKit을 많이 테스트했으며 peerID는 항상 숫자 (예 : 754569949)입니다. peerID를 어휘로 uint32_t로 캐스팅하는 것이 안전합니까? peerID가 숫자가 아닌 경우가 있습니까?GameKit의 peerID를 uint32_t로 캐스팅 할 수 있습니까?

+0

캐스팅하면 메모리에 주소가 부여됩니다. NSString을 사용할 수있는 무언가로 변환 하시겠습니까? 나는 이것이 당신에게 char *를 주었다고 생각한다. http://stackoverflow.com/questions/2216266/printing-an-nsstring –

+0

캐스트와 함께 나는 어휘 캐스트 (편집 된 게시물)를 의미했다.문제는 코드의 다른 부분과의 호환성을 위해 문자열이 –

+0

이 아닌 정수로 클라이언트를 식별해야합니다. NSString이 C++ 유형이 아닌 경우에는'std :: string'을 사용할 수 있습니다. –

답변

0

나는 당신의 질문에 두 부분을 참조하십시오 : 1) peerID 문자열에서 int 파싱; 2) 내부 ID와 peerID 사이의 연결을 유지합니다. 당신이 당신의 C++ 코드로 peerID를 가져온 다음 GameKit 프레임 워크를 사용하기 위해 NSString로 다시 변환 할 수해야하는 경우

, 당신은 공식 문서가 제공하는 것보다 peerID의 내용에 대한 더 이상 가정을해서는 안된다.

즉, 절대적으로 int를 사용해야하는 경우 peerID을 내부 식별자에 매핑하는 방법을 제공하십시오. 그러나 peerID을 계속 지키고 식별자와 연결하면 ID에서 NSString으로 다른 방식으로 매핑 할 수 있습니다.

NSString -> uint32_t의지도를 작성하는 것이 좋습니다.

위의 내용은 대부분 첫 번째 문장에서 언급 한 두 번째 부분을 다룹니다. 이제 peerID을 정수로 구문 분석하여 저장하는 경우를 생각해 봅시다. 당신이 peerID 가정 중 하나

특정 peerID 항상 같은 uint32_t에 매핑 것이라는 점을 보장해야하는 경우

항상 uint32_t에 맞는 번호를 표시하거나 문자열의 해시를 계산한다. 두 가지 방법 모두에 문제가 있습니다. 이러한 짧은 해시는 실제 사용시 충돌을 일으킬 수 있습니다. 다른 한편, 귀하의 시스템은 애플이 편지를 포함하도록 peerID을 연장하기로 결정한 어느 날을 제동 할 수도 있습니다.

그래서 나는 정말로 당신을 위해 결정을 내릴 수는 없지만, 나는 당신이 고려하고 싶은 가능성을 제시하려고 노력했습니다. 나는 원래 peerID을 사용하는 방법을 찾고, 아마도 C++ 문자열 유형으로 변환 할 것을 강력히 제안합니다.

0

문제는없는 문자열 코드의 다른 부분과의 호환성을 위해, 나는 정수로 클라이언트를 식별 할 필요가 있다는 것입니다

당신의 부재에, 이러한 문자열에서 정수를 얻을 수있는 경우 어떠한 보증도 항상 숫자 일 것입니다. 단순히 알려진 ID의 테이블을 작성하고 인덱스를 할당하십시오.

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

빠르게 두 표현 사이의 변환이 std::map의를 사용할 수 있습니다.

NSString을 C++의 문자열로 변환하기 만하면됩니다. 또는 먼저 Objective-C에서 색인을 번역하고 유지 관리하면 C++ 코드에 색인을 제공 할 수 있습니다.