Как преобразовать NSString в без знака int в Какао? - PullRequest
7 голосов
/ 13 мая 2010

Мое приложение получает 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];

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

1 Ответ

7 голосов
/ 13 мая 2010

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

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

unsigned n;
sscanf([str UTF8String], "%u", &n);
...