通过boost crc计算spilted文件的校验和

时间:2013-12-01 05:27:00

标签: checksum crc

我想知道如果我可以通过读取文件的前半部分来计算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

1 个答案:

答案 0 :(得分:0)

我无法弄清楚你在问什么。

首先,CRC不是校验和。校验和中的“和”表示添加了数据。 CRC计算有限域上的多项式余数,该有限域不是和。这很重要,因为您似乎在询问组合CRC。无法添加两个CRC来获取整个CRC的结构。

其次,获得多个CRC的方法是计算这些部分的单个CRC。这就是示例代码的作用。 result包含一个CRC,使用process_bytes更新每个使用它运行的CRC。

第三,可能组合两个CRC,给定两个CRC和第一个片段的长度,以获得连接的两个片段的单个CRC。操作并不简单,但您可以在zlib's crc32_combine() routine中找到它。