6

我试图在 Objective-C 中进行二进制、八进制、十进制和十六进制之间的转换。我在将八进制转换为十进制时遇到问题。

我尝试了以下方法:

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

它工作正常,按预期返回 63,但我的八进制值是一个 NSString。我怎样才能告诉计算机它是八进制的?

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

任何帮助,将不胜感激!

4

3 回答 3

4

最干净的解决方案可能是:

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

或者

long long result = strtoll(input.UTF8String, NULL, 8);
于 2012-10-10T13:34:32.070 回答
3

在 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。前导零是允许的,但不是必需的。

于 2012-10-10T11:39:54.987 回答
0

或者,如果你想下拉到 C,你可以使用sscanf

int oct;
sscanf( [yourString UTF8String], "%o", &oct );
于 2012-10-10T13:20:47.367 回答