2010-09-01 56 views
5

我想将NSString对象转换为具有相同数值的NSNumber。当我使用此语句创建的NSString对象...为什么NSNumber类不能正确地将我的NSString对象转换为long long?

NSString *songID = [localNotif.userInfo objectForKey:@"SongID"]; 

了var songID包含字符串值@"10359537395704663785"。当我试图将其转换为使用语句一个NSNumber对象...

NSNumber *songIDNumber = [NSNumber numberWithLongLong:[songID longLongValue]]; 

了var songIDNumber包含9223372036854775807

什么我做错了错误的值?值得注意的是,有时候这段代码可以正常工作并产生正确的NSNumber值,但大部分时间都会失败,如上所示。

在此先感谢您的帮助!

更新:上帝我爱这个网站!由于unbeli和卡尔,我能够解决它使用更新的代码来自的NSString转换为NSNumber的...

unsigned long long ullvalue = strtoull([songID UTF8String], NULL, 0); 
NSNumber *songIDNumber = [NSNumber numberWithUnsignedLongLong:ullvalue]; 

回答

4

9223372036854775807十进制是十六进制0x7FFFFFFFFFFFFFFF。您的号码是10359537395704663785,对于long long来说这个号码太大并且溢出。从NSString documentation

返回溢出LLONG_MAXLLONG_MIN

5

longLongValuereturns溢出的情况下LLONG_MAXLLONG_MAX正是你会得到什么,你9223372036854775807价值根本不适合在long long

尝试使用NSDecimalNumber代替。