2010-05-01 19 views
12

Tôi có một số trong số NSString @"15". Tôi muốn chuyển đổi này để NSUInteger, nhưng tôi không biết làm thế nào để làm điều đó ...NSString tới NSUInteger

+1

Để yêu cầu hỗ trợ đọc các giá trị chưa ký từ NSString, vui lòng truy cập http://bugreport.apple.com và gửi một bản dupe của radar: // 2264733 dựa vào thành phần 'Foundation | X'. –

Trả lời

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

Nếu bạn thực sự muốn có một NSUInteger, chỉ cần đúc nó, nhưng bạn có thể muốn kiểm tra giá trị trước.

+1

Tôi nghĩ rằng nên đọc '[str integerValue]; ' – dreamlax

+0

D'oh! Cố định, cảm ơn dreamlax. – squelart

+2

Một chút không đầy đủ. Điều này sẽ không hoạt động nếu giá trị lớn hơn INT_MAX. Và nếu điều này là khá có khả năng nếu bạn đang sử dụng nó cho những thứ như độ dài byte. –

0

bạn có thể thử với [string longLongValue] hoặc [string intValue] ..

17

Câu trả lời hiện được chọn không chính xác cho NSUInteger. Khi Corey Floyd chỉ ra một nhận xét về câu trả lời đã chọn, điều này sẽ không hoạt động nếu giá trị lớn hơn INT_MAX. Một cách tốt hơn để làm điều này là sử dụng NSNumber và sau đó sử dụng một trong những phương pháp trên NSNumber để lấy loại mà bạn đang quan tâm, ví dụ .:

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

không hoạt động nữa! – hasan83

+0

Vui lòng mô tả chi tiết hơn trong bình luận của bạn hasan83. Chính xác thì bạn đã làm gì không hiệu quả? –

+0

giá trị phù hợp với nsuinteger nhưng không có trong nsinteger đã được chuyển đổi. – hasan83

1

Tất cả những câu trả lời là sai trên một hệ thống 64-bit.

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. 

Kiểm tra với 9223372036854775808, không phù hợp với chữ ký long long.