2012-05-19 6 views
5

Ho un file binario (file.bin) nella cartella delle risorse, voglio leggerlo e mostrarlo come binario. L'idea è di mettere le informazioni binarie in un array, ma, in un primo momento, sto cercando di mostrarlo in un UILabel, come quello:Mostra NSData come binario in una 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; 
} 

`

Ma mostra i dati in HEX. Come posso farlo in binario per inserirlo in un NSMutableArray? Grazie.

+1

Per "in binario" si intende letteralmente "notazione di base 2"? – dasblinkenlight

+0

Sì, ad esempio: NSSTRING string = @ "01000101000 .." – Sergiodiaz53

+0

Abbastanza sicuro di aver bisogno di scrivere il proprio decodificatore binario. Una volta ho scritto una lingua che interpretava B "101010 .." come un binario letterale, ma non ho mai visto alcun linguaggio standard che potesse leggere o formattare binari. –

risposta

7

Non so se c'è qualcosa di nativo che lo faccia, ma posso proporre una soluzione alternativa. Perché non fai la tua funzione che fa la conversione. Qui è il mio esempio:

Nel luogo si ottengono i valori esadecimali:

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 funzione di soluzione:

- (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! 
} 

Spero che questo aiuti!

+0

Funziona !!! Molte grazie!!. Sembra strano perché il mio file è in binario e devo convertirlo ma è ok. – Sergiodiaz53

+0

Felice per te :) Ricordati di accettare questa risposta se ha risolto il tuo problema in modo che appaia come una risposta corretta. – antf

+0

Che mi dici di G fino a Z? – Supertecnoboff