CRC32校验,zlib库-----c++

引入库

find_package(ZLIB REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC ZLIB::ZLIB)
#include <zlib.h>      // 引入zlib库进行CRC32校验

/// <summary>
/// crc32校验函数
/// </summary>
/// <param name="response">需要校验的数据</param>
/// <param name="dataSize">数据的长度(多少字节)</param>
/// <param name="crc32_recv">需要对比的校验码</param>
/// <returns></returns>
bool calculateAndCheckCRC32(const char* data, size_t dataSize, unsigned int crc32_recv)
{
    // 验证响应数据是否足够包含文件大小和CRC32校验值
    if (!data)
    {
        std::cout << "data is empty " << std::endl;
        return false;
    }
    
    // 计算CRC32
    unsigned int crc32_calc = crc32(0L, Z_NULL, 0);
    crc32_calc = crc32(crc32_calc, (const Bytef*)data, dataSize);
    printf("Src crc32: %u calculate crc32: %u \n", crc32_recv, crc32_calc);
    // 比较并返回校验结果
    if (crc32_recv == crc32_calc) 
    {
        std::cout << "CRC32校验成功" << std::endl;
        return true; // 返回文件大小,便于后续处理
    }
    else 
    {
        std::cout << "CRC32校验失败" << std::endl;
        return false; // 返回错误代码或特殊值,表示校验失败
    }
}

//
tool_class tc;
 const std::string requestUrl = "http://127.0.0.1:5000/?v=1&b=0&s=120&p=text";
 std::string response = tc.sendHttpRequest(requestUrl);
 if (response.size()>4)
 {
     int size = response.size();
     std::cout << "Received data size: "  << size << std::endl;

     unsigned int fileSize;
     memcpy(&fileSize, &response[0], 4);
     std::cout << "fileSize: " << fileSize << std::endl;
     unsigned int crc32_rec;
     memcpy(&crc32_rec, &response[size - 4], 4);
     std::cout << "crc32_rec: " << crc32_rec << std::endl;
     calculateAndCheckCRC32(response.data() + 4, response.size() - 8, crc32_rec);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值