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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了- [NSString longLongValue]在0x [duplicate]之后忽略我的字符串相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

打印出来:“0”

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

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

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

答案

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

以上是关于- [NSString longLongValue]在0x [duplicate]之后忽略我的字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥 longLongValue 返回不正确的值

C11工具类:字符转换

算法线段树

多个运算符匹配这些操作数

bzoj3011 可并堆

C++11string与int的相互转换