指引网

当前位置: 主页 > 编程开发 > C >

C++库boost进行CRC64计算的方法实例

来源:网络 作者:佚名 点击: 时间:2017-07-19 23:07
[摘要]  Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。 CRC64,即循环冗余校验。本文我们来讲讲使用boost进行CRC64计算。

因接入平台,平台提供的是一个字符串的key作为用户标识,而且要用到分布式,所以没法用以前的数据库递增来做用户ID,于是用CRC64来生成uint64_t来作为用户ID,做法也比较简单。如下:

 代码如下 复制代码
 std::map<size_t, size_t> xLongMap;

 char szTemp[128] = {0};

 boost::crc_optimal<64, 0x04C11DB7, 0, 0, false, false> crc;
 for (uint32_t i = 0; i < 1000000000; ++i)
 {
     memset(szTemp, 0, sizeof(szTemp));
     sprintf_s(szTemp, "%d%s%s%s", i, "1a2b3c", "4d5e6f", "7g8h9i");
    
     crc.process_bytes(szTemp, strlen(szTemp));
     size_t nPos = crc.checksum();
     crc.reset();

     if (!xLongMap.insert(std::map<size_t, size_t>::value_type(nPos, 0)).second)
     {
         std::cout << "重复了,当前数量:" << i << ", 字串为:" << szTemp << ", hash pos: " << nPos << std::endl;
         system("pause");
         break;
     }
 }


需要包含boost/crc.hpp

测试下来1.3亿没有重复,还是比较给力的。

可惜的是后来也没用到这个算法,因为key中有URL转义,导致有%这样的字符,后来就用了别的方法。

------分隔线----------------------------