簡體   English   中英

如何在可可中讀取十六進制文件

[英]How to read Hex file in cocoa

我有1個十六進制文件,我想讀取此文件並將其解析為NSString。 我使用此代碼讀取十六進制文件,但僅在控制台中打印了十六進制代碼:

 -(void)readHexfile
{
    NSData *data = [NSData dataWithContentsOfFile:@"path file"];
    NSLog(@"Patch File: %@",data);
}

你有什么建議嗎? 提前致謝

使用stringWithContentsOfFile:encoding:error:而不是dataWithContentsOfFile將其讀取為NSString。

您已經讀過使用NSScanner (首先使用[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]將數據轉換為字符串[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] (假設您的文本是純ASCII或UTF-8),或者直接使用+[NSString stringWithContentsOfFile:encoding:error:]讀取它+[NSString stringWithContentsOfFile:encoding:error:] )。 另請參見《 字符串編程指南》,了解如何使用掃描儀

編輯 :所以看來您想讀取以null終止的字符串的文件。 一種幼稚且低效的方法是:

NSData *data = [NSData dataWithContentsOfFile:@"file.path"];
NSMutableArray *strings = [NSMutableArray array];
const char *rawData = [data bytes];
NSUInteger dataLength = [data length];
NSMutableData *currentString = [NSMutableData data];

for (NSUInteger i = 0; i < dataLength; i++) {
    if (rawData[i] == 0) {
       if ([currentString length] > 0) {
           [strings addObject:[[[NSString alloc] initWithData:currentString encoding:NSUTF8StringEncoding] autorelease]];
       }
       [currentString release];
       currentString = [NSMutableData data];
    } else {
       [currentString appendBytes:&rawData[i] length:1];
    }
}

// Handle the last string if it wasn't null-terminated.
if ([currentString length] > 0) {
   [strings addObject:[[[NSString alloc] initWithData:currentString encoding:NSUTF8StringEncoding] autorelease]];
}

// "strings" now is a list of strings.

沒有像“十六進制文件”這樣的東西。 十六進制(十六進制)是一種數字系統,非常適合以某種適合人類的方式以八位字節(8位字節)顯示二進制數據。

您當前要做的是在控制台上以十六進制顯示NSData對象的描述。

一些快速而骯臟的技巧可能只是使用NSData的描述。

NSString *hexString = [data description];

這將產生一些開銷,您可以使用字符串操作方法來去除這些開銷。 有些方法可能需要更多的工作。

相反,如果您對十六進制表示形式不感興趣,請使用stringWithContentsOfFile將文件直接讀取到NSString對象中。 然后,您可以根據文件的實際編碼方式應用各種編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM