2010-09-01 4 views
5

J'essaie de convertir un objet NSString en un NSNumber avec la même valeur numérique. Lorsque je crée l'objet NSString en utilisant cette déclaration ...Pourquoi la classe NSNumber ne convertit-elle pas correctement mon objet NSString en un long chemin?

NSString *songID = [localNotif.userInfo objectForKey:@"SongID"]; 

le var songID contient la valeur de chaîne @"10359537395704663785". et quand je tente de le convertir en un objet NSNumber utilisant l'instruction ...

NSNumber *songIDNumber = [NSNumber numberWithLongLong:[songID longLongValue]]; 

le var songIDNumber contient la valeur incorrecte de 9223372036854775807

Qu'est-ce que je fais mal? Il peut également être utile de noter que parfois ce code fonctionne et produit la valeur NSNumber correcte, mais la plupart du temps, il échoue comme indiqué ci-dessus.

Merci d'avance pour votre aide!

MISE À JOUR: Dieu J'aime ce site! Merci à unbeli et karl, j'ai pu le réparer en utilisant le code mis à jour pour convertir du NSString au NSNumber ...

unsigned long long ullvalue = strtoull([songID UTF8String], NULL, 0); 
NSNumber *songIDNumber = [NSNumber numberWithUnsignedLongLong:ullvalue]; 

Répondre

4

9223372036854775807 décimale est 0x7FFFFFFFFFFFFFFF en hexadécimal. Votre numéro est 10359537395704663785, ce qui est trop grand pour un long long et déborde. De l'NSString documentation:

retours LLONG_MAX ou LLONG_MIN en cas de débordement.

5

longLongValuereturnsLLONG_MAX en cas de débordement, et LLONG_MAX est exactement ce que vous obtenez, vous ne 9223372036854775807. valeur simplement rentre pas dans long long

Essayez d'utiliser NSDecimalNumber à la place.

Questions connexes