我试图做的二进制,八进制,十进制和十六进制之间的转换在Objective-C。 我有问题转换八进制转换为十进制。
我曾尝试以下:
NSString *decString = [NSString stringWithFormat:@"%d", 077];
它工作正常,返回63如预期,但我的八进制值是一个的NSString。 我怎样才能知道它是一个八进制的计算机;
我知道有一个叫“scanHexInt:”方法,我用十六进制转换为十进制,但似乎没有scanOctInt ...
任何帮助,将不胜感激!
最简洁的解决方案可能是:
long result = strtol(input.UTF8String, NULL, 8);
要么
long long result = strtoll(input.UTF8String, NULL, 8);
定义上的NSString类别(把这个对任何的源代码模块或进入一个新的.m / .h文件中对顶,@interface进入.H,@implementation到.M):
@interface NSString (NSStringWithOctal)
-(int)octalIntValue;
@end
@implementation NSString (NSStringWithOctal)
-(int)octalIntValue
{
int iResult = 0, iBase = 1;
char c;
for(int i=(int)[self length]-1; i>=0; i--)
{
c = [self characterAtIndex:i];
if((c<'0')||(c>'7')) return 0;
iResult += (c - '0') * iBase;
iBase *= 8;
}
return iResult;
}
@end
使用它这样的:
NSString *s = @"77";
int i = [s octalIntValue];
NSLog(@"%d", i);
该方法返回表示该串中的八进制值的整数。 它返回0,如果该字符串不是一个八进制数。 前导零是允许的,但不是必需的。
另外,如果你要下降到C,你可以使用sscanf
int oct;
sscanf( [yourString UTF8String], "%o", &oct );