我正在尝试计算 ALAsset 的 CRC 校验和。我的目标是保存所有 CRC 并在以后比较它们以查看资产是否已更改,但每次为相同资产生成 CRC 时,我都会得到不同的结果。
要生成 CRC:
#import "CRC32.h"
#import <zlib.h>
@implementation CRC32
+ (uint32_t)CRC32Value:(NSData*)data
{
uLong crc = crc32(0L, Z_NULL, 0);
crc = crc32(crc, [data bytes], [data length]);
return crc;
}
@end
如何使用:
void(^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result == nil)
{
return;
}
CrawlAssetData *assetData = [[CrawlAssetData alloc] init];
[assetData setCrc:[CRC32 CRC32Value:[NSData dataWithBytes:&(result)
length:sizeof(result)]]];
这是我在不同场合为同一资产生成 CRC 时的结果:
id: 17575
url: assets-library://asset/asset.JPG?id=BB282CBD-F5B1-4771-B48B-E021224C7384&ext=JPG
文件大小: 1394332
crc: 3605102491
创建时间: 2456085.397025
id:
17826 url: assets-library://asset/asset.JPG?id=BB282CBD-F5B1-4771-B48B-E021224C7384&ext=JPG
文件大小: 1394332
crc: 1383370697
创建时间: 2456085.397025
如您所见,文件大小和 url 相同,但 CRC 不同。
我计算CRC错误吗?或者我应该使用 ALAsset 的不同部分来生成 CRC?也许每次检索 ALAsset 时某些数据都会有所不同?
提前致谢!