如何提取64位有符号整数值

时间:2010-09-15 08:42:35

标签: iphone objective-c cocoa-touch 64-bit integer

我正在查询NSDictionary的值。因为我遇到了问题,我打印了这个物体。它向我展示了以下内容:

<CFString 0x5d33630 [0x26af380]>{contents = "myDictionaryItem"} = <CFNumber 0x5d58940 [0x26af380]>{value = +1286301600, type = kCFNumberSInt64Type}

因此它是有符号64位整数的类型。所以我试着像这样提取值

NSString *myString = [NSString stringWithFormat:@"%qi", [myDictionary objectForKey:@"myDictionaryItem"]];

这给了我一个值,但值不是字典中的值。

我也试过这个

long long my64bitsignedIntegerValue = (long long)[myDictionary objectForKey:@"myDictionaryItem"];

但是我收到警告Cast from pointer to integer of different size。这不起作用,因为stringWithFormat返回的类型为id。我发现post id类型为UInt32。并且有符号的64位整数不是无符号的32位整数,所以我得到了这个警告。如果我忽略警告,则值仍然是错误的。

我想拥有的价值是1286301600.有符号整数(-2.147.483.648到2.147.483.647)可以做我想要的事情。我不明白为什么Cocoa试图制作64位有符号整数。

如何提取字典的64位有符号整数并将其用作变量?

3 个答案:

答案 0 :(得分:0)

[myDictionary objectForKey:@"myDictionaryItem"]

返回对象(我想 - NSNumber),而不是标量数。如果它确实是一个NSNUmber对象,那么你可以使用以下函数之一从中获取一个数字:

-intValue
-longValue
-longLongValue

以下行必须从您的号码中生成正确的字符串:

NSString *myString = [NSString stringWithFormat:@"%qi", [[myDictionary objectForKey:@"myDictionaryItem"] intValue]];

答案 1 :(得分:0)

你想:

[[myDictionary objectForKey:@"myDictionaryItem"] integerValue];

[[myDictionary objectForKey:@"myDictionaryItem"] longLongValue];

CFNumber / NSNumber是一个围绕数字原语的包装器对象。

答案 2 :(得分:0)

我猜这是一个NSNumber,所以这样的事情应该有效:

NSNumber *num = [myDictionary objectForKey:@"myDictionaryItem"];
long numAsLong = [num longValue];
long long numAsLongLong = [num longLongValue];