【问题标题】:-[NSString longLongValue] ignores my string after 0x [duplicate]-[NSString longLongValue] 在 0x 之后忽略我的字符串 [重复]
【发布时间】:2019-08-03 13:55:30
【问题描述】:

当我使用此代码将数组中的字符串转换为long long 时,它失败并打印出“0”,因为该字符串以“0x”开头。

这是我的数组:NSArray <NSString *> *offsets = @["0x1003567"];

当我尝试使用此代码记录它时:

NSLog(@"Offset: %lld", [offsets[0] longLongValue]);

打印出来:“0”

当我从 0x1003567 中删除“0x”时,它会打印出正确的数字。

但是,我确实需要“0x”才能使用它。

有什么方法可以让它转换成我想要的样子吗?

【问题讨论】:

    标签: objective-c cocoa nsstring nsarray


    【解决方案1】:

    您的字符串包含一个十六进制数字。 NSString 上没有直接将其内容解释为十六进制的方法。

    您可以使用NSScanner 来执行此操作。

    NSScanner *scanner = [NSScanner scannerWithString:offsets[0]];
    unsigned long long result;
    if ([scanner scanHexLongLong:&result] && scanner.scanLocation == offsets[0].length)
        NSLog(@"Offset: %llu", result);
    else
        /* string was not a hexadecimal number; handle failure */;
    

    顺便说一句:

    当我从 0x1003567 中删除“0x”时,它会打印出正确的数字。

    不准确。它将“1003567”解释为十进制数(即 1,003,567)并将其打印出来。但这不是 0x1003567 的值。 0x1003567 的十进制值为 16790887(即 16,790,887)。如果该数字包含大于 9 的十六进制数字(字母 A-F),那么它将在那时停止解释它们。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2015-07-10
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      相关资源
      最近更新 更多