5

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

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

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

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

varsongIDNumber包含错误的值9223372036854775807

我究竟做错了什么?还可能值得注意的是,有时此代码确实可以工作并产生正确的 NSNumber 值,但大多数情况下它会失败,如上所示。

在此先感谢您的帮助!

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

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

2 回答 2

5

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

尝试改用NSDecimalNumber

于 2010-09-01T21:27:28.780 回答
4

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

返回LLONG_MAXLLONG_MIN溢出。

于 2010-09-01T21:26:30.903 回答