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