2011-08-25 15 views
7

私は16進数の文字列を目的の-cのバイナリ形式に変換する必要があります。 たとえば、7fefff78という16進数の文字列がある場合は、1111111111011111111111101111000に変換しますか? BR、 Suppi16進数を2進数のiphoneに変換するには

+0

http://stackoverflow.com/questions/4618403/convert-binary-to-decimal-in-objective-c –

+2

の重複私は1つが、反対ではなく、重複していることを確信しています。 –

+0

@Carl:あなたは正しい。 –

答えて

8

ニース再帰的なソリューションの累乗の数拠点の美しさ...あなたが先頭にゼロを必要とする場合には

NSString *hex = @"49cf3e"; 
NSUInteger hexAsInt; 
[[NSScanner scannerWithString:hex] scanHexInt:&hexAsInt]; 
NSString *binary = [NSString stringWithFormat:@"%@", [self toBinary:hexAsInt]]; 

-(NSString *)toBinary:(NSUInteger)input 
{ 
    if (input == 1 || input == 0) 
     return [NSString stringWithFormat:@"%u", input]; 
    return [NSString stringWithFormat:@"%@%u", [self toBinary:input/2], input % 2]; 
} 
2

は、単に各桁を一つずつ変換

:小さなルックアップテーブルなど、0 -> 00007 -> 0111F -> 1111は、これは非常に簡潔に作ることができます。

別の基地:-)

+0

手動変換?スイッチスタイルのステートメントにコード16の場合? :) –

+1

@ジョナサン:ルックアップテーブルは、switch文ではなく、それ自体を示唆します。 –

+0

この重複した質問にはプログラム的な回答があります:http://stackoverflow.com/questions/4618403/convert-binary-to-decimal-in-objective-c –

1

、例えば18のリターン00011000の代わり11000

-(NSString *)toBinary:(NSUInteger)input strLength:(int)length{ 
     if (input == 1 || input == 0){ 

     NSString *str=[NSString stringWithFormat:@"%u", input]; 
      return str; 
     } 
     else { 
      NSString *str=[NSString stringWithFormat:@"%@%u", [self toBinary:input/2 strLength:0], input % 2]; 
      if(length>0){ 
       int reqInt = length * 4; 
       for(int i= [str length];i < reqInt;i++){ 
        str=[NSString stringWithFormat:@"%@%@",@"0",str]; 
       } 
      } 
      return str; 
     } 
} 
NSString *hex = @"58"; 
NSUInteger hexAsInt; 
[[NSScanner scannerWithString:hex] scanHexInt:&hexAsInt]; 
NSString *binary = [NSString stringWithFormat:@"%@", [self toBinary:hexAsInt strLength:[hex length]]]; 
NSLog(@"binario %@",binary); 
0

私はkerrek SBの答えに同意してこれを試しました。 私の仕事です。

+(NSString *)convertBinaryToHex:(NSString *) strBinary 
{ 
    NSString *strResult = @""; 
    NSDictionary *dictBinToHax = [[NSDictionary alloc] initWithObjectsAndKeys: 
            @"0",@"0000", 
            @"1",@"0001", 
            @"2",@"0010", 
            @"3",@"0011", 

            @"4",@"0100", 
            @"5",@"0101", 
            @"6",@"0110", 
            @"7",@"0111", 

            @"8",@"1000", 
            @"9",@"1001", 
            @"A",@"1010", 
            @"B",@"1011", 

            @"C",@"1100", 
            @"D",@"1101", 
            @"E",@"1110", 
            @"F",@"1111", nil]; 

    for (int i = 0;i < [strBinary length]; i+=4) 
    { 
     NSString *strBinaryKey = [strBinary substringWithRange: NSMakeRange(i, 4)]; 
     strResult = [NSString stringWithFormat:@"%@%@",strResult,[dictBinToHax valueForKey:strBinaryKey]]; 
    } 
    return strResult; 
} 
関連する問題