获取文件crc32码

1。 初始化crctables数组

在.h文件里声明: 

NSMutableArray *crcTables;

BOOLhadInitCRCTables;  //已初始化标志



.m里处理

- (void) initCRCTables;

{

if (hadInitCRCTables

return;

hadInitCRCTables =YES;


crcTables = [[NSMutableArrayalloc] initWithCapacity:256];

longlong int ploy =0xEDB88320;

longlong int crc;

for (int i =0; i <= 255; i ++) {

crc = i;

for (int j =8; j >= 1; j --) {

if ((crc &1) == 1) {

crc = (crc >>1) ^ ploy;

}

else {

crc =  (crc >>1) ;

}

}

[crcTablesaddObject:[NSNumbernumberWithLong: crc]];

}

}


2. 取文件crc


- (longlong int) getFileCRC: (NSString *)path;

{

longlong int crc =0xFFFFFFFF;

[selfinitCRCTables];

//创建文件管理器

    NSFileManager *fm = [NSFileManagerdefaultManager];

if (![fmfileExistsAtPath: path]) {

NSLog(@"文件不存在");

return0;

}

//得到文件大小

NSError *error =nil;

NSDictionary* dictFile = [[fmattributesOfItemAtPath:path error:&error] retain];

if (error)

{

NSLog(@"GetFileSize error: %@", error);

//break;

return0;

}

int len = [dictFilefileSize];

//NSLog(@"file size=%d", nFileSize);

NSFileHandle *inFile;    

inFile = [NSFileHandlefileHandleForReadingAtPath: path];

if (inFile ==nil)

{

NSLog(@"open file for reading failed");

return0;

}

//设置当前偏移量

[inFileseekToFileOffset: 0];

int bufferSize;

int j;

while (YES) {

if (len <=0break;

if (len >=10240

bufferSize =10240;

else

bufferSize = len;

NSData *data = [inFilereadDataOfLength: bufferSize];

Byte *byteData = (Byte *)[data bytes];

j =0;

while (j < bufferSize) {

int iIndex = (crc ^ byteData[j]) &0xFF;

NSNumber *num = [crcTablesobjectAtIndex:iIndex];

crc = ((crc >>8) & 0xFFFFFF) ^ [numunsignedLongValue];

j ++;

}

len -= bufferSize;

}

[inFilecloseFile];

NSLog(@"result = %llu", crc ^ 0xFFFFFFFF);

return (crc ^0xFFFFFFFF);

}


代码下载:

http://download.csdn.net/detail/txinfo/4319052

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值