Хранение и получение неподписанного длинного длинного значения к/от NSString

Я думаю, что рос в различном поколении, чем больше всего здесь....

Одна из самых влиятельных книг я читал, был APUE.

Или в значительной степени что-либо W. Richard Stevens.

23
задан lostInTransit 25 July 2009 в 08:55
поделиться

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 будет содержать только числовые цифры и содержит «допустимое» беззнаковое длинное длинное значение. Недостатком этого подхода является то, что UTF8String создает то, что по существу составляет [[numStr dataUsingEncoding: NSUTF8StringEncoding] bytes] , или, другими словами, что-то вроде строк из 32 байтов автоматически освобожденной памяти на вызов. В подавляющем большинстве случаев это не проблема.

Пример того, как добавить что-то вроде unsignedLongLongValue в NSString , что одновременно очень быстро и не использует автоматически освобожденную память как побочный эффект, взгляните на конец моего (длинного) ответа на этот вопрос SO . В частности, пример реализации rklIntValue , который потребует только тривиальных изменений для реализации unsignedLongLongValue .

Дополнительную информацию о strtoull можно найти на его странице руководства.

57
ответ дан 29 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: