将(u)int64_t转换为NSNumbers

时间:2010-09-19 14:15:41

标签: cocoa nsnumber uint64

基本上我的问题是这个,我正在创建一个使用uint64_t对象作为密钥的NSMutableDictionary。

有没有更好的方法来创建它们而不是这样做?

uint64_t bob=7;

NSNumber *bobsNumber;

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
bobsNumber=[NSNumber numberWithUnsignedLong:bob];
#else
bobsNumber=[NSNumber numberWithUnsignedLongLong:bob];
#endif

只要你没有将它包含在二进制文件/套接字/ NSData对象/中,它就可以工作。但有没有更好的方法呢?我真的希望确保对象是64位,无论我在哪个平台上运行它。

我想我总是可以通过总是无符号长整数来避免整个问题但当然如果我在任何有效数字中分配这些对象,这会浪费64位机器上的大量堆空间....

1 个答案:

答案 0 :(得分:16)

在64位OS X / iOS平台上,

long long是64位。在所有OpenStep下载平台上,numberWithUnsignedLongLong:uint64_t都是正确的。

上次检查时,您使用的工厂方法实际上并不影响所使用的表示形式;它只取决于数字的值(除非你使用太小的尺寸,导致它被截断)。

更新:这些天,正确的答案是NSNumber *bobsNumber = @(bob);