Как извлечь 64-битное целое число со знаком - PullRequest
0 голосов
/ 15 сентября 2010

Я запрашиваю 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. Я нашел этот пост , где id имеет тип UInt32. 64-разрядное целое число со знаком не является 32-разрядным целым числом без знака, поэтому я получаю это предупреждение. Если я проигнорирую предупреждение, значение все равно будет неправильным.

Значение, которое я хотел бы получить, например, 1286301600. Целое число со знаком (от -2.147.483.648 до 2.147.483.647) должно делать то, что я хочу. Я не понимаю, почему Какао пытается сделать 64-битное целое число со знаком.

Как извлечь 64-разрядное целое число со знаком из словаря и использовать его в качестве переменной?

Ответы [ 3 ]

0 голосов
/ 15 сентября 2010

Вы хотите:

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

или

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

CFNumber / NSNumber - это объект-оболочка вокруг числового примитива.

0 голосов
/ 15 сентября 2010

Я предполагаю, что это NSNumber, поэтому что-то вроде этого должно работать:

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

и т.д.

0 голосов
/ 15 сентября 2010
[myDictionary objectForKey:@"myDictionaryItem"]

Возвращает объект (я полагаю - NSNumber), а не скалярное число. Если это действительно объект NSNUmber, то вы можете получить из него число, используя одну из следующих функций:

-intValue
-longValue
-longLongValue

Следующая строка должна содержать правильную строку из вашего номера:

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