2010-05-01 12 views
12

मुझे एनएसएसटींग @"15" में एक नंबर मिला है। मैं NSUInteger को यह परिवर्तित करना चाहते हैं, लेकिन मुझे लगता है कि ऐसा करने के लिए पता नहीं कैसे ...एनएसयूइंटर के लिए एनएसएसटींग

+1

एनएसएसटींग से हस्ताक्षरित मूल्यों को पढ़ने के लिए समर्थन का अनुरोध करने के लिए, कृपया http://bugreport.apple.com पर जाएं और रडार का डुप्लिकेट करें: // 2264733 घटक 'फाउंडेशन के खिलाफ | X'। –

उत्तर

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

तुम सच में एक NSUInteger चाहते हैं, बस डाली यह, लेकिन आप पहले से मूल्य का परीक्षण करना चाह सकते हैं।

+1

मुझे लगता है कि '[str integerValue] पढ़ना चाहिए; ' – dreamlax

+0

डी ओह! फिक्स्ड, धन्यवाद dreamlax। – squelart

+2

थोड़ा अपूर्ण। यदि यह मान INT_MAX से बड़ा है तो यह काम नहीं करेगा। और यदि यह काफी संभावना है यदि आप इसे बाइट लंबाई जैसी चीजों के लिए उपयोग कर रहे हैं। –

0

आप [string longLongValue] या [string intValue] साथ कोशिश कर सकते हैं ..

17

वर्तमान में चुना गया उत्तर NSUInteger के लिए गलत है। जैसा कि कोरी फ़्लॉइड चयनित उत्तर पर एक टिप्पणी बताते हैं, यदि यह मान INT_MAX से बड़ा है तो यह काम नहीं करेगा। ऐसा करने का एक बेहतर तरीका प्रकार आप में रुचि रखते हैं, उदा .:

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

यह भी काम नहीं करता! – hasan83

+0

कृपया अपनी टिप्पणी hasan83 में अधिक वर्णनात्मक हो। आपने वास्तव में क्या किया जो काम नहीं करता? –

+0

एक मान जो nsuinteger में फिट बैठता है लेकिन nsinteger में नहीं बदला गया था। – hasan83

1

इन सभी सवालों के जवाब 64-बिट सिस्टम पर गलत हैं पुनः प्राप्त करने के NSNumber पर एक विधि का उपयोग NSNumber और फिर उपयोग करने के लिए है।

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. 

9223372036854775808 के साथ टेस्ट है, जो एक पर हस्ताक्षर किए long long में फिट नहीं होगा।

संबंधित मुद्दे