2010-05-01 9 views
12

Ich habe eine Nummer in einem NSString @"15". Ich möchte dies NSUInteger konvertieren, aber ich weiß nicht, wie das zu tun ...NSString zu NSUInteger

+1

Um Unterstützung für das Lesen unsignierter Werte von NSString anzufordern, besuchen Sie bitte http://bugreport.apple.com und reichen Sie einen Dupe von Radar: // 2264733 gegen die Komponente 'Foundation | X'. –

Antwort

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]; 

Wenn Sie wirklich ein NSUInteger wollen, nur werfen es, aber Sie möchten vielleicht den Wert vorab testen.

+1

Ich denke, dass sollte lesen '[str integerValue];' – dreamlax

+0

D'oh! Korrigiert, danke dreamlax. – squelart

+2

Ein wenig unvollständig. Dies funktioniert nicht, wenn der Wert größer als INT_MAX ist. Und wenn das sehr wahrscheinlich ist, wenn Sie es für Dinge wie Byte-Längen verwenden. –

0

Sie mit [string longLongValue] oder [string intValue] versuchen ..

17

Die aktuell gewählte Antwort ist falsch für NSUInteger. Da Corey Floyd einen Kommentar zu der ausgewählten Antwort ausgibt, wird dies nicht funktionieren, wenn der Wert größer als INT_MAX ist. Ein besserer Weg, dies zu tun, ist NSNumber zu verwenden und dann eine der Methoden auf NSNumber mit der Art abzurufen, die Sie interessiert, z.B .:

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

dies nicht funktioniert auch! – hasan83

+0

Bitte beschreiben Sie in Ihrem Kommentar hasan83. Was genau hast du gemacht, das hat nicht funktioniert? –

+0

ein Wert, der in nsinteger aber nicht in nsinteger passt, wurde konvertiert. – hasan83

1

Alle diese Antworten sind falsch auf einem 64-Bit-System.

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 mit 9223372036854775808, die ein signiertes long long nicht passen.