具体实现如下,通过文件头获取指定长度的十六进制字符串进行判断
- (BOOL)isRealZipFileForNSData:(NSData *)fileData {
if (!fileData || [fileData length] == 0) {
return NO;
}
NSMutableString *hexHeaderString = [[NSMutableString alloc] initWithCapacity:[fileData length]];
[fileData enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
unsigned char *dataBytes = (unsigned char*)bytes;
for (NSInteger i = 0; i < byteRange.length; i++) {
NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
if ([hexStr length] == 2) {
[hexHeaderString appendString:hexStr];
} else {
[hexHeaderString appendFormat:@"0%@", hexStr];
}
if (hexHeaderString.length > 8) {
break;
}
}
}];
// 504B0304 表示文件格式是zip的十六进制 文件头
if ([hexHeaderString hasPrefix:@"504b0304"] || [hexHeaderString hasPrefix:@"504B0304"]) {
return YES;
}
return NO;
}