最新消息:

使用boost进行CRC64计算

技术文章 NickYang 6851浏览 3评论

因接入平台,平台提供的是一个字符串的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转义,导致有%这样的字符,后来就用了别的方法。

转载请注明:C++爱好者博客 » 使用boost进行CRC64计算

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (3)

  1. 为啥不用uuid? .. crc不是就是弄个校验和的么
    Yu4年前 (2015-04-25)回复
    • 只是正好用到了,为了测试一致性哈希,还有测试协议校验的
      eliteYang4年前 (2015-04-25)回复
  2. 谢谢博主分享,长见识了! 恒创科技一年两次,回馈新老顾客全场主机7折优惠活动,官网:http://www.henghost.com/news/311.html
    香港虚拟主机5年前 (2014-08-27)回复