【问题标题】:Converting a octal String to Decimal in Objective-C?在 Objective-C 中将八进制字符串转换为十进制?
【发布时间】:2012-10-10 11:31:18
【问题描述】:

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

我尝试了以下方法:

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

它工作正常,按预期返回 63,但我的八进制值是一个 NSString。如何告诉计算机它是八进制;

我知道有一个方法叫做“scanHexInt:”我用来将十六进制转换为十进制,但是好像没有scanOctInt...

任何帮助将不胜感激!

【问题讨论】:

标签: objective-c ios cocoa-touch base-conversion


【解决方案1】:

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

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

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

【讨论】:

  • 我比我更喜欢这个答案 XD +1
  • 这正是我需要的!但是有个小问题,如果值大于 10,000,000,000 就出错了。我已经将结果定义为 unsigned long long int。
【解决方案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。前导零是允许的,但不是必需的。

【讨论】:

  • 嗯...是的 :) 但至少它是有教育意义的。
  • 它有效,但在流通中效果不佳。还是谢谢。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2016-04-13
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多