2011-08-25 19 views
7

Necesito convertir una cadena hexadecimal a una forma binaria en el objetivo c, ¿Podría alguien guiarme? Por ejemplo, si tengo una cadena hexadecimal 7fefff78, quiero convertirla a 1111111111011111111111101111000?Cómo convertir el maleficio al iphone binario

BR, Suppi

+0

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

+2

estoy bastante seguro de que uno es todo lo contrario, no es un duplicado. –

+0

@Carl: estás en lo cierto. –

Respuesta

8

Niza solución recursiva ...

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

simplemente convertir cada dígito uno a uno: 0 -> 0000, 7 -> 0111, F -> 1111, etc. Una pequeña tabla de búsqueda podría hacer esto muy concisa.

La belleza de bases numéricas que son potencias de otra base :-)

+0

Conversión manual? Codifique 16 casos en una declaración de cambio de estilo? :) –

+1

@Jonathan: una tabla de búsqueda sugeriría a sí misma en lugar de una declaración de cambio. –

+0

Hay una respuesta programática en la pregunta que esta duplica: http://stackoverflow.com/questions/4618403/convert-binary-to-decimal-in-objective-c. –

1

En caso de que necesite ceros a la izquierda, por ejemplo 18 vuelve 00011000 en lugar de 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

Acepto la respuesta de kerrek SB e intenté esto. Su trabajo para mí.

+(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; 
} 
Cuestiones relacionadas