2010-05-01 8 views
12

J'ai un numéro dans un NSString @"15". Je veux convertir en NSUInteger, mais je ne sais pas comment faire ...NSString à NSUInteger

+1

Pour demander la prise en charge de la lecture de valeurs non signées à partir de NSString, rendez-vous sur http://bugreport.apple.com et déposez une dupe de radar: // 2264733 contre le composant 'Foundation | X'. –

Répondre

25
NSString *str = @"15"; 
// Extract an integer number, returns 0 if there's no valid number at the start of the string. 
NSInteger i = [str integerValue]; 

Si vous voulez vraiment un NSUInteger, juste jeter mais vous voudrez peut-être tester la valeur à l'avance.

+1

Je pense que cela devrait lire '[str integerValue];' – dreamlax

+0

D'oh! Fixe, merci dreamlax. – squelart

+2

Un peu incomplet. Cela ne fonctionnera pas si la valeur est plus grande que INT_MAX. Et si cela est très probable si vous l'utilisez pour des choses comme les longueurs d'octets. –

0

vous pouvez essayer avec [string longLongValue] ou [string intValue] ..

17

La réponse actuellement choisie est incorrecte pour NSUInteger. Comme Corey Floyd fait remarquer un commentaire sur la réponse sélectionnée cela ne fonctionnera pas si la valeur est plus grande que INT_MAX. Une meilleure façon de le faire est d'utiliser NSNumber puis en utilisant l'une des méthodes sur NSNumber pour récupérer le type qui vous intéresse, .: par exemple

NSString *str = @"15"; // Or whatever value you want 
NSNumber *number = [NSNumber numberWithLongLong: str.longLongValue]; 
NSUInteger value = number.unsignedIntegerValue; 
+0

cela n'a pas fonctionné aussi! – hasan83

+0

S'il vous plaît être plus descriptif dans votre commentaire hasan83. Qu'est-ce que vous avez fait exactement qui n'a pas fonctionné? –

+0

une valeur qui correspond à nsuinteger mais pas à nsinteger a été convertie. – hasan83

1

Toutes ces réponses sont fausses sur un système 64 bits.

NSScanner *scanner = [NSScanner scannerWithString:@"15"]; 
unsigned long long ull; 
if (![scanner scanUnsignedLongLong:&ull]) { 
    ull = 0; // Or handle failure some other way 
} 
return (NSUInteger)ull; // This happens to work because NSUInteger is the same as unsigned long long at the moment. 

Test avec 9223372036854775808, qui ne rentre pas dans un signé long long.