【问题标题】:How to convert an NSString to an unsigned int in Cocoa?如何在 Cocoa 中将 NSString 转换为无符号整数?
【发布时间】:2011-02-18 22:16:09
【问题描述】:

我的应用程序收到一个包含unsigned intNSString。 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];

由于我必须先将其转换为 NSInteger,因此上述内容是否会“切断”大 unsigned int 的结尾?或者看起来可以使用吗?如果它会切断它的结束,那么下面的(我认为有点杂乱无章)怎么样?

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

感谢您提供的任何帮助! :)

【问题讨论】:

  • 要请求支持从 NSString 中读取无符号值,请访问 bugreport.apple.com 并针对组件 Foundation | X 提交一个重复的 radar://2264733。

标签: objective-c cocoa nsstring unsigned


【解决方案1】:

第一个版本会截断,第二个版本应该没问题,只要您的号码实际上适合无符号整数 - 参见例如"Data Type Size and Alignment".
但是,您应该使用+numberWithUnsignedInt 创建NSNumber

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多