为什么NSNumber类没有正确地将我的NSString对象转换为long long?

Bea*_*red 5 iphone nsnumber nsstring ipad ios

我正在尝试将NSString对象转换为具有相同数值的NSNumber.当我使用此语句创建NSString对象时...

NSString *songID = [localNotif.userInfo objectForKey:@"SongID"];
Run Code Online (Sandbox Code Playgroud)

var songID包含字符串值@"10359537395704663785".当我尝试使用语句将其转换为NSNumber对象时...

NSNumber *songIDNumber = [NSNumber numberWithLongLong:[songID longLongValue]];
Run Code Online (Sandbox Code Playgroud)

var songIDNumber包含错误的值9223372036854775807

我究竟做错了什么?值得注意的是,有时此代码确实有效并产生正确的NSNumber值,但大部分时间它都会失败,如上所示.

在此先感谢您的帮助!

更新:上帝,我喜欢这个网站!感谢unbeli和carl,我能够使用更新的代码修复它,从NSString转换为NSNumber ...

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

unb*_*eli 5

longLongValue LLONG_MAX在溢出的情况下返回,并且LLONG_MAX正是你得到的,9223372036854775807.你的价值根本不适合long long

请尝试使用NSDecimalNumber.


Car*_*rum 4

9223372036854775807十进制是0x7FFFFFFFFFFFFFFF十六进制。您的数字是10359537395704663785,对于 a 来说太大long long并且溢出。来自NSString 文档

返回LLONG_MAXLLONG_MIN溢出。