2010-09-15 95 views
0

我正在查询一个NSDictionary的值。因为我遇到了问题,所以我打印了对象。它让我看到以下内容:如何提取64位有符号整数值

<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其中idUInt32类型。一个有符号的64位整数不是无符号的32位整数,所以我得到这个警告。如果我忽略这个警告,这个值仍然是错误的。

我想要的价值是1286301600.一个有符号整数(-2.147.483.648到2.147.483.647)应该做我想要的东西。我不明白为什么Cocoa试图做一个64位有符号整数。

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

回答

0
[myDictionary objectForKey:@"myDictionaryItem"] 

返回对象(我想 - NSNumber),而不是标量数字。

-intValue 
-longValue 
-longLongValue 

下面这行必须出示您的号码正确的字符串:

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

作品像一个风情万种:)谢谢 – testing 2010-09-15 08:58:37

0

你想如果真的是一个NSNumber的对象,那么你可以使用以下功能之一是得到一个数字:

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

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

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

0

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

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

相关问题