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 が取得されるたびに一部のデータが異なる可能性がありますか?
前もって感謝します!