Ответ 1
Есть много способов сделать это. Наиболее прагматичным является следующее:
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
, которое является очень быстрым и не использует память с автореализацией в качестве побочного эффекта, взгляните на конец моего (длинного) ответа на этот вопрос SO. В частности, пример реализации rklIntValue
, который потребует только тривиальных модификаций для реализации unsignedLongLongValue
.
Более подробную информацию о strtoull
можно найти на странице руководства.