24

我有一个 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 变量。

谢谢。

4

1 回答 1

59

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

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只包含数字,并且它包含一个“有效的”无符号 long long 值。这种方法的一个缺点是,它UTF8String创建的内容基本上相当于[[numStr dataUsingEncoding:NSUTF8StringEncoding] bytes],或者换句话说,每次调用都会产生 32 字节的自动释放内存。对于绝大多数用途来说,这从来都不是问题。

有关如何添加类似这样的内容的示例unsignedLongLongValueNSString非常快又不使用自动释放的内存作为副作用,请查看我对这个 SO 问题的(长)回答的结尾。特别是 的示例实现rklIntValue,只需要简单的修改即可实现unsignedLongLongValue

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

于 2009-07-25T09:24:46.103 回答