crc_optimal----boost学习笔记
来源:互联网 发布:域名注册网站查询 编辑:程序博客网 时间:2024/05/09 15:02
crc_optimal—-boost学习笔记
知识标签 : boost, crc, C++
boost/crc.hpp中可查到
//Bits常选32或64,表示生成CRC32或CRC64校验码 template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly, BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor, bool ReflectIn, bool ReflectRem >class crc_optimal
常用接口
public: // 构造函数 explicit crc_optimal( value_type init_rem = InitRem ); void reset( value_type new_rem = InitRem ); // 计算单字符的CRC void process_byte( unsigned char byte ); // 该函数计算内存块CRC,由头文件中实现代码可知: // 它循环调用process_byte(unsigned char byte) void process_block( void const *bytes_begin, void const *bytes_end ); // 该函数计算内存块CRC,调用process_block void process_bytes( void const *buffer, std::size_t byte_count ); // 返回CRC结果 value_type checksum() const; // 以下两个重载operator()含义完全不一样,勿混淆 // 重载operator(),它调用process_byte() void operator ()( unsigned char byte ); // 重载operator(),调用checksum() value_type operator ()() const;private: // Member data value_type rem_;
又有
typedef crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true> crc_32_type;
下面用crc_32_type写段测试小程序
#include<iostream>#include<algorithm>#include<boost/crc.hpp>int main(void){ boost::crc_32_type crc32; //一个crc对象 std::cout << std::hex; //设置16进制输出 std::cout << crc32.checksum() << std::endl; crc32.process_byte('a'); //计算一个byte std::cout << crc32.checksum() << std::endl; //结果 crc32.process_bytes("0123456789", 10); //计算10个字节 std::cout << crc32.checksum() << std::endl; char szCh[] = "0123456789"; crc32.reset(); //重新初始化 crc32.process_block(szCh, szCh + 10); //使用内存块计算 std::cout << crc32.checksum() << std::endl; std::cout << "--------------------" << std::endl; crc32.reset(); crc32.process_bytes("0123456789", 10); std::cout << crc32() << std::endl; std::string str("0123456789"); crc32.reset(); //对于for_each见下面解释 std::cout << std::for_each(str.begin(), str.end(), crc32)() << std::endl; std::cout << crc32() << std::endl; //无参,相当于checksum() return 0;}
结果如下
总结
由结果可知,同一数据CRC序列结果相同
猜想:crc_optimal参数设置合理的话,64bitCRC序列应该可以用做hash函数返回值
对于for_each有
template<class _InIt, class _Fn1> _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func) {// perform function for each element for (; _First != _Last; ++_First) _Func(*_First); return (_Func); // 返回函数对象_Func }
- for_each(str.begin(), str.end(),crc32)依次把str中的元素作为crc32()的一个参数
- 它相当于对str每一个元素执行process_byte()
- 之后for_each返回crc32函数对象
for_each后面又多了一对(),表示调用crc32(),即相当于checksum(),把所有的计算结果返回
0 0
- crc_optimal----boost学习笔记
- Boost.Python学习笔记
- Boost学习笔记 BOOST_STATIC_ASSERT
- Boost学习笔记 operators
- Boost.Python 学习笔记
- Boost python 学习笔记
- Boost学习笔记-tokenizer
- Boost学习笔记-bind
- Boost python 学习笔记
- Boost 学习笔记
- Boost.Python学习笔记
- boost exception 学习笔记
- boost uuid 学习笔记
- boost SHA1学习笔记
- boost::lambda学习笔记
- BOOST学习笔记
- Boost Thread学习笔记
- boost bimap 学习笔记
- tomcat中三种部署项目的方法
- 显示器材概述
- android侧滑菜单实现方法初探
- 对于树的最远两节点的距离的理解
- 疯狂java之学习笔记(9)---------------八大排序算法
- crc_optimal----boost学习笔记
- php mysql 预编译
- 稳定排序和不稳定排序
- hdu_1863 畅通工程
- PHP 变量类型的强制转换
- Jsoup入门
- hdu_1875 畅通工程再续
- 图的定义和存储结构
- SQL练习题题目