2012-05-19 13 views
5

Tengo un archivo binario (file.bin) en la carpeta de recursos, quiero leerlo y mostrarlo como binario. La idea es poner la información binaria en una matriz, pero, al principio, estoy tratando de mostrarlo en un UILabel, así:Mostrar NSData como binario en un NSString

`NSData * databuffer; NSString * stringdata;

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"bin"]; 
NSData *myData = [NSData dataWithContentsOfFile:filePath]; 

if (myData) { 
     stringdata = [NSString stringWithFormat:@"%@",[myData description]]; 
     labelfile.text = stringdata; 
} 

`

Pero muestra los datos en HEX. ¿Cómo puedo hacerlo en binario para ponerlo en un NSMutableArray? Gracias.

+1

Por "en binario" ¿significa literalmente "notación de base 2"? – dasblinkenlight

+0

Sí, como: cadena NSSTRING = @ "01000101000 .." – Sergiodiaz53

+0

Bastante seguro que necesitará escribir su propio decodificador binario. Escribí un idioma una vez que interpretaría B "101010 .." como un literal binario, pero nunca he visto ningún lenguaje estándar que pueda leer o formatear binario. –

Respuesta

7

No sé si hay algo nativo que lo haga pero puedo proponer una solución alternativa. ¿Por qué no haces tu propia función que hace la conversión? Aquí está mi ejemplo:

En el lugar se obtiene los valores Hex:

NSString *str = @"Af01"; 
NSMutableString *binStr = [[NSMutableString alloc] init]; 

for(NSUInteger i=0; i<[str length]; i++) 
{ 
    [binStr appendString:[self hexToBinary:[str characterAtIndex:i]]]; 
} 
NSLog(@"Bin: %@", binStr); 

La función de la solución:

- (NSString *) hexToBinary:(unichar)myChar 
{ 
    switch(myChar) 
    { 
     case '0': return @"0000"; 
     case '1': return @"0001"; 
     case '2': return @"0010"; 
     case '3': return @"0011"; 
     case '4': return @"0100"; 
     case '5': return @"0101"; 
     case '6': return @"0110"; 
     case '7': return @"0111"; 
     case '8': return @"1000"; 
     case '9': return @"1001"; 
     case 'a': 
     case 'A': return @"1010"; 
     case 'b': 
     case 'B': return @"1011"; 
     case 'c': 
     case 'C': return @"1100"; 
     case 'd': 
     case 'D': return @"1101"; 
     case 'e': 
     case 'E': return @"1110"; 
     case 'f': 
     case 'F': return @"1111"; 
    } 
    return @"-1"; //means something went wrong, shouldn't reach here! 
} 

Espero que esto ayude!

+0

Funciona! ¡¡Muchas gracias!!. Se ve raro porque mi archivo está en formato binario y tengo que convertirlo, pero está bien. – Sergiodiaz53

+0

Feliz por ti :) Recuerda aceptar esta respuesta si resolvió tu problema para que aparezca como una respuesta correcta. – antf

+0

¿Qué hay de G a Z? – Supertecnoboff