2010-05-01 26 views
12

Tengo un número en NSString @"15". Quiero convertir esto en NSUInteger, pero no sé cómo hacer eso ...NSString a NSUInteger

+1

Para solicitar soporte para leer valores sin signo de NSString, visite http://bugreport.apple.com y archive una trampa de radar: // 2264733 contra el componente 'Fundación | X'. –

Respuesta

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 realmente quiere un NSUInteger, simplemente fundido esto, pero es posible que desee probar el valor de antemano.

+1

Creo que debería leer '[str integerValue];' – dreamlax

+0

D'oh! Corregido, gracias Dreamlax. – squelart

+2

Un poco incompleto. Esto no funcionará si el valor es mayor que INT_MAX. Y si esto es bastante probable si lo está usando para cosas como longitudes de bytes. –

0

se puede tratar con [string longLongValue] o [string intValue] ..

17

La respuesta actualmente elegida es incorrecta para NSUInteger. Como Corey Floyd señala un comentario sobre la respuesta seleccionada, esto no funcionará si el valor es mayor que INT_MAX. Una mejor manera de hacer esto es utilizar NSNumber y luego usando uno de los métodos en NSNumber para recuperar el tipo que le interesa, por ejemplo .:

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

¡esto tampoco funcionó! – hasan83

+0

Sea más descriptivo en su comentario hasan83. ¿Qué hiciste exactamente que no funcionó? –

+0

un valor que se ajusta en nsuinteger pero no en nsinteger se convirtió. – hasan83

1

Todas estas respuestas son incorrectas en un sistema de 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. 

prueba con 9223372036854775808, que no cabe en un long long firmado.