2011-08-25 159 views
7

我需要在目标c中将十六进制字符串转换为二进制形式,有人请引导我吗? 例如,如果我有一个十六进制字符串7fefff78,我想将它转换为1111111111011111111111101111000?如何将十六进制转换为二进制iphone

BR, Suppi

+0

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

+2

的重复我敢肯定,一个是相反的,不是重复。 –

+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

@Jonathan:查询表会提示自己而不是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; 
}