2010-01-22 10 views
6

Ich möchte den vorzeichenlosen langen Wert einer NSNumber erhalten. Ich weiß nicht warum, aber es funktioniert nicht. Hier ist, was ich getan habe:Kann den vorzeichenlosen langen Wert einer NSNummer nicht erhalten

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

Wie sehen die Werte im Debugger aus? Sind sie das Gleiche wie was gedruckt wird? –

+0

Für was es wert ist, am 10.6.2, bekomme ich 8084143463 beide Male, und die Debugger-Werte sind konsistent. Ich würde vorschlagen, Ihre erste Zeile durch 'NSString * stern = @" 8084143463 ";' zu ersetzen und die Variablen umzubenennen, um für den zufälligen Beobachter Sinn zu ergeben. –

+0

Ja, die NSNummer ist 8084143463 und die unsigned lange 3789176167 – Flocked

Antwort

9
8084143463 == 0x1e1da3d67 
3789176167 == 0x0e1da3d67 

Die Größe einer langen auf einem 64-Bit-System beträgt 8 Bytes. Die Größe eines langen auf einem 32-Bit-System (wie das iPhone) ist 4 Bytes. Sie müssen einen long long auf einem iPhone verwenden, um diesen Wert zu speichern.

+0

Das klingt logisch, danke für die Antwort. Aber ich habe es mit langem Long versucht fooo = [iddd longLongValue]; und foo ist wieder 3789176167 – Flocked

+3

Sie müssen auch die Formatangabe von '% llu' verwenden. –

+0

Ah jetzt funktioniert es. Ich habe vergessen,% llu in NSLog zu schreiben. Vielen Dank! – Flocked

3

Ihr Wert ist größer als der Maximalwert ein unsigned long halten kann (2^32-1 == 4294967295) in 32-Bit-Modus.

Verwandte Themen