2011-08-08 36 views
0

我已经使用NSURLConnection实现了下载部分。 现在我试图为CRC校验添加一个更多的功能。 我通过维基百科阅读了一些基本概念。 但我有点困惑如何开始。 任何人都可以给我这个提示吗?谢谢crc在使用NSURLConnection时下载

btw ..我不是想自己设计整个crc部分。

+0

你知道,这是没有必要的,对不对?见下面的评论。 – Snips

回答

1

zlib的,它是包含与iOS,包括CRC32()函数:

uLong crc = crc32(0L, Z_NULL, 0); 
crc = crc32(crc, [self bytes], (uInt)[self length]); 
return crc; 

注意,如下面零星消息注释,CRC校验被内置到TCP/IP。当然,还有其他原因可能会在iOS上执行CRC ......但是对数据包完整性进行基本检查可能不是其中的一项。

+1

只是想知道......是否真的有必要在此级别添加crc - 不应该在TCP/IP的低层负责确保数据交付完整且没有损坏? – Snips

+0

是的,TCP/IP在硬件级别内置了32位CRC检测。 –

+0

所以我不会生气:-) OP注意。 – Snips

1

如果你喜欢自己实现简单的crc。 This可以提供帮助。

例如采用BSD 16位CRC算法:

- (NSInteger)getBSDcrc:(NSData*)data { 
    NSUInteger lendth = [data length]; 
    char *byte = (char*)[data bytes]; 
    NSInteger crc = 0; 

    for (int i = 0; i < length; ++i) { 
     crc = (crc >> 1) + ((crc & 1) << 15); 
     crc += byte[i]; 
     crc &= 0xffff; 
    } 
    return crc; 
} 
相关问题