代码之家  ›  专栏  ›  技术社区  ›  user439407

将(U)转换为NSnumbers

  •  9
  • user439407  · 技术社区  · 14 年前

    所以本质上我的问题是,我正在创建一个使用uint64对象作为键的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
    

    只要您不将它包含在二进制文件/sockets/nsdata对象/whatever中,这就可以工作。但是有没有更好的方法来做呢?我真的很想确定这个对象是64位的,不管我在哪个平台上运行它。

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

    1 回复  |  直到 12 年前
        1
  •  16
  •   Jens Ayton    12 年前

    long long 在64位OS X/IOS平台上为64位。在所有开放式阶梯下降平台上, numberWithUnsignedLongLong: 是正确的 uint64_t .

    上次我检查时,您使用的工厂方法实际上并不影响使用的表示法;它只依赖于数字的值(除非您使用的大小太小,导致它被截断)。

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