我想知道如果我可以通过读取文件的前半部分来计算2个校验和以获得一个校验和A然后读取文件的其余部分以获得另一个校验和B,并且这两个校验和A,B将合并为一个uniq校验和(长度较长)
我使用boost :: CRC库尝试实现它,但我不知道我是否正确使用它? (1)process_bytes的第二个参数是指总缓冲区长度? (2)结果是否会递归计算,我不必担心数组?或者当我调用process_byte时,它只是计算缓冲区数组的新单字节的新校验和?
坦率地说 std::ifstream ifs( argv[i], std::ios_base::binary );
if ( ifs )
{
do
{
char buffer[BUFFER_SIZE];
ifs.read( buffer, BUFFER_SIZE);
result.process_bytes( buffer, HALF_FILE_SIZE );
} while (HALF or END of FILE );
}
std::cout << result.checksum() << std::endl;
plz参考此页面查看boost :: CRC示例代码: http://www.boost.org/doc/libs/1_37_0/libs/crc/crc_example.cpp
答案 0 :(得分:0)
我无法弄清楚你在问什么。
首先,CRC不是校验和。校验和中的“和”表示添加了数据。 CRC计算有限域上的多项式余数,该有限域不是和。这很重要,因为您似乎在询问组合CRC。无法添加两个CRC来获取整个CRC的结构。
其次,获得多个CRC的方法是计算这些部分的单个CRC。这就是示例代码的作用。 result
包含一个CRC,使用process_bytes
更新每个使用它运行的CRC。
第三,是可能组合两个CRC,给定两个CRC和第一个片段的长度,以获得连接的两个片段的单个CRC。操作并不简单,但您可以在zlib's crc32_combine()
routine中找到它。