存储和检索NSString中的无符号long long值

时间:2009-07-25 08:55:08

标签: 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变量中。

感谢。

1 个答案:

答案 0 :(得分:57)

有很多方法可以实现这一目标。以下是最实用的:

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字节自动释放内存的行。对于绝大多数用途来说,这不是什么问题。

有关如何将unsignedLongLongValue添加到NSString这样既快速且不使用自动释放内存作为副作用的示例,请查看我的(长)答案的结尾到this SO question。特别是rklIntValue的示例实现,只需要进行微不足道的修改即可实现unsignedLongLongValue

有关strtoull的更多信息,请参见其手册页。