[英]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.