转换一个八进制字符串的Objective-C的十进制?(Converting a octal Str

2019-09-23 21:17发布

我试图做的二进制,八进制,十进制和十六进制之间的转换在Objective-C。 我有问题转换八进制转换为十进制。

我曾尝试以下:

NSString *decString = [NSString stringWithFormat:@"%d", 077];

它工作正常,返回63如预期,但我的八进制值是一个的NSString。 我怎样才能知道它是一个八进制的计算机;

我知道有一个叫“scanHexInt:”方法,我用十六进制转换为十进制,但似乎没有scanOctInt ...

任何帮助,将不胜感激!

Answer 1:

最简洁的解决方案可能是:

long result = strtol(input.UTF8String, NULL, 8);

要么

long long result = strtoll(input.UTF8String, NULL, 8);


Answer 2:

定义上的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,如果该字符串不是一个八进制数。 前导零是允许的,但不是必需的。



Answer 3:

另外,如果你要下降到C,你可以使用sscanf

int oct;
sscanf( [yourString UTF8String], "%o", &oct );


文章来源: Converting a octal String to Decimal in Objective-C?