6

Objective-C で 2 進数、8 進数、10 進数、16 進数の間の変換を試みています。8 進数から 10 進数への変換に問題がありました。

私は次のことを試しました:

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

正常に動作し、期待どおり 63 を返しますが、8 進数の値は NSString です。8 進数であることをコンピューターに伝えるにはどうすればよいですか。

16進数を10進数に変換するために使用した「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);

このメソッドは、文字列の 8 進数値を表す整数を返します。文字列が 8 進数でない場合は 0 を返します。先行ゼロは許可されますが、必須ではありません。

于 2012-10-10T11:39:54.987 に答える
0

または、C にドロップダウンする場合は、次を使用できます。sscanf

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