繁体   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