objective-c - 在 NSString 中存储和检索 unsigned long long 值

标签 objective-c nsstring nsnumber

我有一个 unsigned long long 值,我想将其存储到 NSString 中并从字符串中检索。

最初我在 NSNumber 中有值,我用它来获取字符串

NSString *numStr = [NSString stringWithFormat:@"%llu", [myNum unsignedLongLongValue]];

其中 myNum 是一个 NSNumber。

要从 NSString 取回 NSNumber,我必须首先获取 unsigned long long 值。但是 NSString 类中没有方法可以做到这一点(我们只有一个方法可以获取 long long 值,而不是 unsigned long long 值)。

谁能告诉我如何将值返回到 NSNumber 变量中。

谢谢。

最佳答案

有很多方法可以做到这一点。以下是最实用的:

NSString *numStr = [NSString stringWithFormat:@"%llu", [myNum unsignedLongLongValue]];

// .. code and time in between when numStr was created
// .. and now needs to be converted back to a long long.
// .. Therefore, numStr used below does not imply the same numStr above.

unsigned long long ullvalue = strtoull([numStr UTF8String], NULL, 0);

这做出了一些合理的假设,例如 numStr 将只包含数字,并且它包含一个“有效”的 unsigned long long 值。这种方法的缺点是 UTF8String 创建的内容实际上等于 [[numStr dataUsingEncoding:NSUTF8StringEncoding] bytes],或者换句话说,类似于 32 字节的自动释放每次调用的内存。对于绝大多数用途,这根本不是问题。

有关如何将类似 unsignedLongLongValue 的内容添加到 NSString 的示例,它既非常快又不使用自动释放的内存作为副作用,请查看结尾我对 this SO question 的(长)回答.特别是 rklIntValue 的示例实现,它只需要简单的修改即可实现 unsignedLongLongValue

有关 strtoull 的更多信息可以在其手册页中找到。

关于objective-c - 在 NSString 中存储和检索 unsigned long long 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1181637/

相关文章:

ios - 如何获取将要呈现的 HTML 字符串的高度?

objective-c - 无法识别的选择器发送到实例,但我不明白为什么

ios - 单击 URL 时 UITextView 崩溃

ios - 向 drawRect 中的 NSString 文本添加投影 : method without using UILabel

ios - 确定 UILabel 可以接受的最大字符数

objective-c - libz.dylib libsqlite3.dylib 不在 Xcode 7 中,解析不保存数据

ios - 从服务器播放视频在 MediaPlayer 框架中不起作用

ios - 在模拟器上崩溃但在设备上不崩溃 : -[NSTaggedPointerString stringValue]: unrecognized selector sent to instance

objective-c - 判断 NSNumber 是否为 NaN

ios - NSUInteger 中的错误值。为什么?