iphone - 为什么 NSNumber 类不能正确地将我的 NSString 对象转换为 long long?

标签 iphone ipad nsstring ios nsnumber

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

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

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

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

var songIDNumber 包含错误的值 9223372036854775807

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

在此先感谢您的帮助!

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

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

最佳答案

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

尝试使用 NSDecimalNumber相反。

关于iphone - 为什么 NSNumber 类不能正确地将我的 NSString 对象转换为 long long?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3622259/

相关文章:

iphone - 实现对 iphone/ipad 的传真支持

ios - swift 1.2 Xcode 6.3 NSString?到字符串给线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x20)

iphone - 如何在 web View 中以编程方式添加带有后退和第四个按钮的工具栏以在 iphone 中导航?

ios - iOS 7 上的 UIBarButtonSystemItemRefresh

iphone - NSString 值在 -(id)init 之后更改

ios - NSMutableDictionary removeObjectForKey 奇怪的行为

iphone - 进入编辑模式时动画自定义绘制的 UITableViewCell

iphone - 我是否可以更改 NSManagedObjectContextObjectsDidChangeNotification 中的对象图?

iphone - IOS 中的警报通知

iphone - 运行时与编译时 iPhone 版本检查