2010-05-01 21 views
12

NSString @"15" numaralı bir numaram var. Ben NSUInteger bu dönüştürmek istiyorum ama bunu nasıl bilmiyorum ...NSString için NSUInteger

Eğer [string longLongValue] veya [string intValue] ile deneyebilirsiniz
+1

NSString'den imzasız değerleri okumak için destek istemek için, http://bugreport.apple.com adresini ziyaret edin ve radar: // 2264733 bileşenine karşı "Foundation | X'. –

cevap

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

Eğer gerçekten bir NSUInteger istiyorsanız, sadece dökme Bu, ama önceden değeri test etmek isteyebilirsiniz.

+1

Bence [str integerValue]; – dreamlax

+0

D'oh! Sabit, teşekkürler dreamlax. – squelart

+2

Biraz eksik. Bu değer, INT_MAX değerinden daha büyükse işe yaramaz. Ve eğer bayt uzunlukları gibi şeyler için kullanıyorsanız, bu oldukça olasıdır. –

17

Şu anda seçili olan yanıt NSUInteger için yanlıştır. Corey Floyd, seçilen cevapla ilgili bir yoruma işaret ettiğinden, bu değer INT_MAX değerinden daha büyükse işe yaramaz. Bunu yapmanın daha iyi bir yolu ilgilendiğiniz türü, ör .:

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

gibi görünmüyordu; – hasan83

+0

Lütfen yorumunuzda daha açıklayıcı olabilir hasan83. Tam olarak ne yaptın, işe yaramadı? –

+0

, nsuinteger'e uyan ancak nsinteger'e sığmayan bir değeri dönüştürdü. – hasan83

1

Bütün bu cevaplar 64 bit sistemde yanlış almak için NSNumber üzerinde yöntemlerden birini kullanarak sonra NSNumber ve kullanmaktır. 9223372036854775808 ile

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. 

Testi, imzalı long long sığmaz.