- [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]之后忽略我的字符串的主要内容,如果未能解决你的问题,请参考以下文章