cocoa - 将 (u)int64_t 转换为 NSNumber

标签 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 位的,无论我在什么平台上运行它。

我想我可以通过始终使用 unsigned long long 来避免整个问题,但是如果我以任何有效数量分配这些对象,当然会浪费 64 位计算机上的大量堆空间....

最佳答案

long long 在 64 位 OS X/iOS 平台上是 64 位。在所有 OpenStep 后代平台上,numberWithUnsignedLongLong: 对于 uint64_t 是正确的。

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

更新:现在,正确答案是 NSNumber *bobsNumber = @(bob);

关于cocoa - 将 (u)int64_t 转换为 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746028/

相关文章:

ios - 无法使用类型为 '(UInt64)' 的参数列表调用

cocoa - 在 Rosetta 中运行垃圾收集应用程序时如何调试崩溃?

macos - 如何检测弹出窗口是否已完成?

xcode - 使应用程序启动时的大小和位置与关闭时相同

iphone - 语义问题 : Why does this warning appear here

objective-c - 初始化 NSArray 的数字

string - 在 golang 中将字符串转换为 *uint64

xcode - 在我的 NSView 窗口之外获取 mouseMoved/mouseDragged

iphone - 如何使用 Core Data 在 UITextfield 中设置整数?

c++ - Visual Studio 2010 SP1 中的 64 位整数初始化错误