繁体   English   中英

在Objective-C中将八进制字符串转换为十进制?

[英]Converting a octal String to Decimal in Objective-C?

我试图在Objective-C中进行Binary,Octal,Decimal和Hexadecimal之间的转换。 我在将Octal转换为Decimal时遇到了问题。

我尝试过以下方法:

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

它运行正常,按预期返回63,但我的Octal值是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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM