有很多方法可以做到这一点。以下是最务实的:
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非常快又不使用自动释放的内存作为副作用,请查看我对这个 SO 问题的(长)回答的结尾。特别是 的示例实现rklIntValue,只需要简单的修改即可实现unsignedLongLongValue。
更多信息strtoull可以在其手册页中找到。