2010-01-22 17 views
6

Bir NSNumber öğesinin işaretsiz uzun değerini almak istiyorum. Nedenini bilmiyorum ama işe yaramıyor. İşte ne yaptım:NSNumber öğesinin işaretsiz uzun değerini alamıyor

NSString * stern = [idd objectAtIndex:indexPath.row]; // get a String with Number from a NSArray 
NSNumberFormatter * lols = [[NSNumberFormatter alloc] init]; 
NSNumber * iddd = [lols numberFromString:stern]; 
NSLog(@"%@", iddd); // I get the right number: 8084143463 
unsigned long fooo = [iddd unsignedLongValue]; 
NSLog(@"%lu", fooo); // I get the wrong number: 3789176167 
[twitterEngine deleteUpdate:fooo]; 
+0

Değerler hata ayıklayıcıda nasıl görünüyor? Yazdırılanla aynı mı? –

+0

Değeri için, 10.6.2'de, iki kez 8084143463 alıyorum ve hata ayıklayıcı değerleri tutarlı. İlk satırınızı 'NSString * stern = @ "8084143463" ile değiştirmeyi ve değişkenleri, sıradan gözlemciye anlamlı olacak şekilde değiştirmeyi öneririm. –

+0

Evet, NSNumber 8084143463 ve imzasız uzun 3789176167 – Flocked

cevap

9
8084143463 == 0x1e1da3d67 
3789176167 == 0x0e1da3d67 

64bit sistemde uzun olan boyut 8 bayttır. 32bit sistemdeki uzunluğun boyutu (iPhone gibi) 4 bayttır. Bu değeri depolamak için bir iPhone'da long long kullanmanız gerekir.

+0

Bu logisch sesleri, cevabı için teşekkürler. Ama uzun uzun fooo = [iddd longLongValue] ile çalıştı; ve foo tekrar 3789176167 – Flocked

+3

Ayrıca, '% llu' biçim belirtecini kullanmanız gerekir. –

+0

Ah şimdi çalışıyor. Sadece NSLog'da% llu yazmayı unuttum. Teşekkürler! – Flocked

3

değeriniz işaretsiz uzun tutabilir maksimum değerden daha büyüktür - 32 bit modunda (2^32 1 == 4294967295).

İlgili konular