2011-01-06 31 views
4

文字列にバイナリシーケンスがあります。それを10進数で変換する方法。 Objective Cに組み込み関数がありますか?Objective Cで2進数から10進数に変換

+12

[このコードは、どうやら、について説明を必要としません]? ;) –

答えて

-1

組み込み関数が見つかりませんでした。そこで、私たちが会話のために行うプロセスに応じて、単純なC関数を書いた。

(int) BinToInt(char *temp) { 
int count, total, i, j, tmp; 

total = 0; 
count = strlen(temp); 

for (i = 0; i <= count; i++) { 
    if (temp[count-i] == '1') { 
     tmp = 1; 
     for (j = 1; j < i; j++) 
      tmp *= 2; 
     total += tmp; 
    } 
} 
20
NSString * b = @"1101"; 
long v = strtol([b UTF8String], NULL, 2); 
NSLog(@"%ld", v); //logs 13 

これの欠点は、唯一の正の数を生成するように見えるということです。

+0

左端のビットを符号ビット(すなわち、 '0001' = 1と' 1001' = -1)として使いたい場合は '[str hasPrefix:@" 1 "]'を使うだけです。それ以外の場合は、他のアルゴリズムを使用して、文字列が負の値に一致するかどうかを確認することができます – Arc676

-1

彼らは今のObjective-Cでの宿題を設定している

(void)convertBinaryToNumeric{ 
    NSString *bin_Input = @"1010"; 
    NSString *reverseInput = [self reverseString:bin_Input]; 
    int dec_Output = 0; 
    int dec_Counter = 0; 

    for (int i=0; i<[reverseInput length]; i++) { 
     dec_Output = [[reverseInput substringWithRange:NSMakeRange(i, 1)] intValue] * [self multipliesByTwo:i]; 
     dec_Output = dec_Counter + dec_Output; 
     dec_Counter = dec_Output; 
    } 
    NSLog(@"Bin:%@ Dec:%d",bin_Input,dec_Output); 
} 

(NSString *)reverseString:(NSString *)inputStr{ 
    NSMutableString *revStr = [[NSMutableString alloc]initWithString:@""]; 
    for (int i=[inputStr length]-1; i>=0; i--) { 
     [revStr appendString:[inputStr substringWithRange:NSMakeRange(i, 1)]]; 
    } 
    return revStr; 
} 

(int)multipliesByTwo:(int)number{ 
    if(number == 0){ 
     return 1; 
    }else{ 
     int bin_value = 2; 
     int multipleBy=0; 
     for (int i=1; i<=number; i++) { 
      if(multipleBy == 0){ 
       multipleBy = bin_value; 
      }else{ 
       multipleBy = multipleBy *2; 
      } 
     } 
     return multipleBy; 
    } 
    return 0; 
} 
+0

それは自分自身のロジックです。 –

関連する問題