2012-05-19 5 views
5

У меня есть двоичный файл (file.bin) в папке ресурсов, я хочу его прочитать и показать его как двоичный. Идея состоит в том, чтобы поместить двоичную информацию в массив, но сначала я пытаюсь показать ее в UILabel, например:Показать NSData как двоичный файл в 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; 
} 

`

Но это показывает данные в HEX. Как я могу сделать это в двоичном формате, чтобы поместить его в NSMutableArray? Спасибо.

+1

Под «в бинарном» вы буквально означаете «нотацию базы 2»? – dasblinkenlight

+0

Да, например: NSSTRING string = @ "01000101000 .." – Sergiodiaz53

+0

Довольно уверен, что вам нужно будет написать свой собственный двоичный декодер. Я однажды написал язык, который бы интерпретировал B «101010 ..» как двоичный литерал, но я никогда не видел ни одного стандартного языка, который бы читал или форматировал двоичный файл. –

ответ

7

Я не знаю, есть ли что-нибудь родное, что делает это, но я могу предложить обходное решение. Почему бы вам не сделать свою собственную функцию, которая выполняет преобразование. Вот мой пример:

На месте вы получите шестнадцатеричные значения:

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

Обходной функция:

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

Надеется, что это помогает!

+0

Он работает !!! Большое спасибо!!. Это выглядит странно, потому что мой файл находится в двоичном формате, и мне нужно его преобразовать, но это нормально. – Sergiodiaz53

+0

Счастливые для вас :) Пожалуйста, не забывайте принимать этот ответ, если он решил вашу проблему, поэтому он выглядит как правильный ответ. – antf

+0

Как насчет G до Z? – Supertecnoboff

Смежные вопросы