- [NSString longLongValue]在0x [duplicate]之后忽略我的字符串

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

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

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

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

打印出来:“0”

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

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

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

objective-c cocoa nsstring nsarray
1个回答
0
投票

您的字符串包含十六进制数字。在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),它将停止在那时解释它们。

© www.soinside.com 2019 - 2024. All rights reserved.