【问题标题】:Parsing 64-bit unsigned integer on iOS在 iOS 上解析 64 位无符号整数
【发布时间】:2011-04-28 10:31:49
【问题描述】:

我在 NSString 中有非常大的无符号整数。这可能大到 2^64。 是否有解析这个的现有函数/类?

据我所知,它是 unsigned long long 值,但是,很难知道我应该使用哪种方法来解析它。

【问题讨论】:

  • 解析到底是什么意思?从你的 NSString 数字到 unsigned long long 的转换?
  • 要请求支持从 NSString 读取无符号值,请访问 bugreport.apple.com 并针对组件 Foundation | X 提交一个重复的 radar://2264733。

标签: cocoa-touch parsing ios unsigned-long-long-int


【解决方案1】:

这是一个旧的,但这里是斯蒂芬佳能(正确)答案的一个稍微可可的变体:

#import <stdlib.h>

@implementation NSString (MyHelpers)
    - (unsigned long long)unsignedLongLongValue {
        return strtoull([self UTF8String], NULL, 0);
    }
@end

现在所有字符串都会响应 unsignedLongLongValue 选择器。

【讨论】:

    【解决方案2】:

    这可能有效,尽管它只能到达2^63 - 1:

    NSScanner *scanner = [NSScanner scannerWithString:numericString];
    long long valueFromString;
    if(![scanner scanLongLong:&valueFromString]) {
        //ERROR
    }
    

    NSScanner 似乎没有 scanUnsignedLongLong 方法。

    【讨论】:

    • 感谢您的回答,但这只是我解释的麻烦。问题只是值可以达到 2^64。
    【解决方案3】:

    也许不是最漂亮的答案,但你应该可以这样做:

    #include <stdlib.h>
    ...
    unsigned long long parsedValue = strtoull([yourString UTF8String], NULL, 0);
    

    其他人可能有更可可的方式。

    【讨论】:

    • 哦,这很好。我喜欢 C 函数。感谢您的回答!
    • 只是 [yourString longLongValue];
    • @roman truba:适用于最大 2^63 的有符号值;提问者想要 unsigned 值高达 2^64。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2011-11-10
    • 2012-10-20
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多