关于objective c:在NSString中存储和检索unsigned long long值

Storing and retrieving unsigned long long value to/from NSString

我有一个无符号的长整型值,希望将其存储到nsstring中并从该字符串中检索。

最初我有一个nsnumber中的值,我用它来获取字符串

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

其中mynum是nsnumber。

要从nsstring中获取nsnumber,我必须首先获取无符号长整型值。但是nsstring类中没有方法可以这样做(我们只有一个方法可以获取长整型值,而不是无符号长整型值)。

有人能告诉我如何将值返回到nsnumber变量中吗?

谢谢。


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

1
2
3
4
5
6
7
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只包含数字,它包含一个"有效的"无符号长整型值。这种方法的一个缺点是,UTF8String创建了实质上相当于[[numStr dataUsingEncoding:NSUTF8StringEncoding] bytes]的内容,或者换句话说,每个调用都是32字节的自动释放内存。对于绝大多数用途来说,这从来都不是问题。

举一个例子来说明如何在NSString中添加像unsignedLongLongValue这样的东西,它既非常快,又不使用自动释放的内存作为副作用,看看我(long)对这个问题的答案的结尾。具体来说,rklIntValue的示例实现,它只需要简单的修改即可实现unsignedLongLongValue

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