2012-05-19 9 views
5

Ich habe eine Binärdatei (file.bin) im Ressourcenordner, ich möchte sie lesen und als Binärdatei anzeigen. Die Idee ist es, die binäre Information in ein Array zu setzen, aber zuerst versuche ich es in einem UILabel zu zeigen, so:NSData als Binärdatei in einem NSString anzeigen

`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; 
} 

`

Aber er die Daten in HEX zeigt. Wie kann ich es in Binärform tun, um es in ein NSMutableArray zu setzen? Danke.

+1

Mit "in binär" meinen Sie wörtlich "Base 2 Notation"? – dasblinkenlight

+0

Ja, wie: NSSTRING string = @ "01000101000 .." – Sergiodiaz53

+0

Ziemlich sicher, dass Sie Ihren eigenen binären Decoder schreiben müssen. Ich habe einmal eine Sprache geschrieben, die B "101010 .." als binäres Literal interpretiert, aber ich habe noch nie eine Standardsprache gesehen, die binär lesen oder formatieren würde. –

Antwort

7

Ich weiß nicht, ob es etwas natives gibt, das das tut, aber ich kann eine Umgehungslösung vorschlagen. Warum machst du nicht deine eigene Funktion, die die Konvertierung macht? Hier ist mein Beispiel:

An der Stelle, um die Hex-Werte erhalten:

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); 

Die Abhilfe Funktion:

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

hoffe, das hilft!

+0

Es funktioniert !!! Danke vielmals!!. Es sieht komisch aus, weil meine Datei binär ist und ich sie konvertieren muss, aber es ist in Ordnung. – Sergiodiaz53

+0

Glücklich für Sie :) Bitte denken Sie daran, diese Antwort zu akzeptieren, wenn es Ihr Problem gelöst hat, so dass es als eine richtige Antwort erscheint. – antf

+0

Was ist mit G bis Z? – Supertecnoboff