Storing and retrieving unsigned long long value to/from NSString

27,080

There are a lot of ways to accomplish this. The following is the most pragmatic:

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);

This makes a few reasonable assumptions such as numStr will only contain numeric digits and it contains a 'valid' unsigned long long value. A drawback to this approach is that UTF8String creates what essentially amounts to [[numStr dataUsingEncoding:NSUTF8StringEncoding] bytes], or in other words something along the lines of 32 bytes of autoreleased memory per call. For the vast majority of uses, this is no problem what-so-ever.

For an example of how to add something like unsignedLongLongValue to NSString that is both very fast and uses no autoreleased memory as a side effect, take a look at the end of my (long) answer to this SO question. Specifically the example implementation of rklIntValue, which would require only trivial modifications to implement unsignedLongLongValue.

More information regarding strtoull can be found in its man page.

Share:
27,080
Vaerenberg
Author by

Vaerenberg

Developing and consulting for iOS and some Android since 2008. Worked on multiple top-selling and featured apps currently available on the App Store.

Updated on July 10, 2022

Comments

  • Vaerenberg
    Vaerenberg almost 2 years

    I have an unsigned long long value which I want to store into an NSString and retrieve from the string.

    Initially I have the value in an NSNumber and I am using this to get the string

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

    where myNum is an NSNumber.

    To get back the NSNumber from the NSString I have to first get the unsigned long long value. But there is no method in the NSString class to do that (we just have one for getting the long long value, not the unsigned long long value).

    Can someone please tell me how I can get back the value into an NSNumber variable.

    Thanks.