2012-05-19 34 views
5

我在資源文件夾中有一個二進制文件(file.bin),我想讀取它並將其顯示爲二進制文件。它的想法是將二進制信息放入一個數組中,但起初我試圖用UILabel來展示它,如下所示:在NSString中顯示NSData爲二進制文件

`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