Как преобразовать NSString в неподписанный интервал в Какао?

Мое приложение вручено NSString содержа unsigned int. NSString не имеет [myString unsignedIntegerValue]; метод. Я хотел бы смочь вынуть значение из строки, не искажая его и затем поместить его в NSNumber. Я пытаюсь сделать это как так:

NSString     *myUnsignedIntString = [self someMethodReturningAString];
NSInteger    myInteger            = [myUnsignedIntString integerValue];
NSNumber     *myNSNumber          = [NSNumber numberWithInteger:myInteger];

// ...put |myNumber| in an NSDictionary, time passes, pull it out later on...

unsigned int myUnsignedInt        = [myNSNumber unsignedIntValue];

Будет вышеупомянутое потенциально "отключать" конец большого unsigned int так как я должен был преобразовать его в NSInteger сначала? Или это смотрит хорошо для использования? Если это отключит конец его, как насчет следующего (что-то вроде клуджа, я думаю)?

NSString     *myUnsignedIntString = [self someMethodReturningAString];
long long    myLongLong           = [myUnsignedIntString longLongValue];
NSNumber     *myNSNumber          = [NSNumber numberWithLongLong:myLongLong];

// ...put |myNumber| in an NSDictionary, time passes, pull it out later on...

unsigned int myUnsignedInt        = [myNSNumber unsignedIntValue];

Спасибо за любую справку можно предложить!:)

7
задан Peter Hosey 14 May 2010 в 08:58
поделиться

1 ответ

Первая версия усекается, а вторая должна подойти, если ваше число действительно вписывается в беззнаковое int - см., Например, «Размер и выравнивание типа данных» .
Однако вы должны создать NSNumber , используя + numberWithUnsignedInt .

Если вы знаете, что кодировка подходит, вы также можете просто воспользоваться C-библиотеками:

unsigned n;
sscanf([str UTF8String], "%u", &n);
7
ответ дан 7 December 2019 в 07:41
поделиться