如何在Cocoa中将NSString转换为unsigned int?

Dav*_*her 7 cocoa unsigned objective-c 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];
Run Code Online (Sandbox Code Playgroud)

上面有可能"切断"大片的结尾,unsigned int因为我必须把它转换成NSInteger第一个吗?或者看起来好用吗?如果它会切断它的结尾,那么下面的内容(我认为有点像kludge)?

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];
Run Code Online (Sandbox Code Playgroud)

谢谢你尽你所能的帮助!:)

Geo*_*che 7

第一个版本截断,第二个版本应该没问题,只要你的数字实际上适合无符号整数 - 参见例如"数据类型大小和对齐".
但是你应该创建NSNumber使用+numberWithUnsignedInt.

如果你知道编码是合适的,你也可以简单地使用C库:

unsigned n;
sscanf([str UTF8String], "%u", &n);
Run Code Online (Sandbox Code Playgroud)