我可以播放GameKit';s peerID到uint32\t 我在GC++中使用GAMEKIT进行网络应用(创建了一个用于管理GAMEKIT网络的ObjuleC类),但问题是GameKit uses NSString(不是C++类型)来识别对等体(PeRID)。我已经测试了很多GameKit,在我的实践中peerID总是一个数字(例如754569949)。用词汇将peerID投射到uint32\t安全吗?有没有皮里德不是数字的情况

我可以播放GameKit';s peerID到uint32\t 我在GC++中使用GAMEKIT进行网络应用(创建了一个用于管理GAMEKIT网络的ObjuleC类),但问题是GameKit uses NSString(不是C++类型)来识别对等体(PeRID)。我已经测试了很多GameKit,在我的实践中peerID总是一个数字(例如754569949)。用词汇将peerID投射到uint32\t安全吗?有没有皮里德不是数字的情况,c++,objective-c,gamekit,uint32,C++,Objective C,Gamekit,Uint32,问题是为了与代码的其他部分兼容,我需要用整数而不是字符串来标识客户机 如果您必须从这些字符串中获取一个整数,在没有任何保证的情况下,它将始终是一个数字,只需构建一个已知ID的表并为其分配索引即可 57483829 => 0 42937422 => 1 3333fghh => 2 您可以使用两个std::maps在两种表示之间快速转换 简单地将NString >转换为一个更为C++友好的字符串。另外,首先在Objto-C中进行翻译和维护索引,然后可以给C++代码一个索引。 <

问题是为了与代码的其他部分兼容,我需要用整数而不是字符串来标识客户机

如果您必须从这些字符串中获取一个整数,在没有任何保证的情况下,它将始终是一个数字,只需构建一个已知ID的表并为其分配索引即可

57483829 => 0
42937422 => 1
3333fghh => 2
您可以使用两个
std::map
s在两种表示之间快速转换


简单地将NString >转换为一个更为C++友好的字符串。另外,首先在Objto-C中进行翻译和维护索引,然后可以给C++代码一个索引。

< P>我看到了几个问题:1)从<代码> PeeID 字符串中解析int;2) 维护内部ID和
peerID
s之间的关联

如果你需要将 PeeID/<代码>放入C++代码中,然后将其转换为<代码> NScord,以与GAMEKIT框架一起使用,则不应该对“代码> PeRID内容比对官方文档提供更多的假设。

换句话说,如果您必须使用INT,请提供一种将
peerID
s映射到内部标识符的方法。但是,保持peerID与您的标识符保持关联,以便能够以另一种方式映射—从您的id返回到
NSString

制作
NSString->uint32\u t
的地图可能是一种方法

以上内容主要包括我在第一句中提到的第二部分。现在让我们考虑是否保存为解析“代码> PEEID 作为整数。

如果需要保证特定的
peerID
始终映射到相同的
uint32\u t
,则可以假定
peerID
表示始终适合
uint32\u t
的数字,或者计算字符串的哈希值。这两种方法都存在问题。如此短的散列在实际使用中可能会发生冲突。另一方面,有一天,当苹果决定将其
peerID
s扩展到包含字母时,您的系统可能会停止运行


所以我真的不能为你做决定,我只是试着列出你可能想考虑的可能性。我强烈建议你找到一个使用原<代码> PeeID的方法,可能转换为C++字符串类型。只需将NSString转换为您可以使用的内容?我想这给了你一个char*和cast,我是指词法cast(编辑文章)。问题是,为了与代码的其他部分兼容,我需要用整数来标识客户端,而不是字符串,如果问题是代码> NString 不是C++类型,则可以使用<代码> STD::String < /C>