我有1个Hex文件,我想读取这个文件并将其解析为NSString。 我使用此代码读取hex文件,但它只在控制台中打印十六进制代码:
-(void)readHexfile
{
NSData *data = [NSData dataWithContentsOfFile:@"path file"];
NSLog(@"Patch File: %@",data);
}
你有什么建议吗?提前致谢
答案 0 :(得分:1)
使用stringWithContentsOfFile:encoding:error:
代替dataWithContentsOfFile
将其作为NSString读取。
答案 1 :(得分:0)
您已使用NSScanner
阅读(使用[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]
将数据转换为字符串(假设您的文字为纯ASCII或UTF-8)或使用{{3}直接读取})。另请参阅+[NSString stringWithContentsOfFile:encoding:error:]
上的字符串编程指南。
编辑:因此,您似乎想要读取带有以空字符结尾的字符串的文件。一种天真而低效的方法是:
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.
答案 2 :(得分:0)
没有像“hex文件”这样的东西。十六进制或十六进制是一种数字系统,非常适合以某种适合人类的方式显示八位字节(8位字节)的二进制数据。
您目前所做的是以十六进制格式在控制台上显示NSData对象的描述。
一些快速而肮脏的黑客可能只是使用NSData的描述。
NSString *hexString = [data description];
这会产生一些开销,你可以使用字符串操作方法。 有很多方法可能需要更多的工作。
相反,如果您对十六进制表示不感兴趣,请使用stringWithContentsOfFile
将文件直接读入NSString对象。然后,您可以根据文件的实际编码方式应用各种编码。