李永亮的专栏

设计改变中国!

Exceptional C++ Style之27
第27条 数据格式和效率之二:(甚至更少的)位操纵
       class CBitBuffer 
{
public:
       CBitBuffer(){};
       virtual ~CBitBuffer(){};
       size_t Size() const{
              return buf_.size();
       }
 
       void Append(unsigned char* p ,size_t num)
       {
              int bits = numeric_limits<unsigned char>::digits;
              for(int i= 0; i<num;++i)
              {
                     buf_.push_back((*p)&(1<<(bits-1-i%bits)));
                     if ((i+1)%bits == 0)
                            ++p;
              }
       }
       void Get(size_t start,size_t num,unsigned char *dst)const
       {
              int bits = numeric_limits<unsigned char>::digits;
              *dst = 0;
              for(int i= 0;i<num;++ i)
              {
                     *dst |= unsigned char(buf_[start + i]<<(bits -1 -i%bits));
                     if ((i+1)%bits == 0)

                     * ++ dst = 0;

              }
       }
private:
       vector<bool> buf_;
};
       Herb Sutter的位容器,看上去很不错,我也很喜欢。附上代码,以后用的机会可能也不会很多吧。
阅读更多
文章标签: c++ dst class
个人分类: 读书笔记
想对作者说点什么? 我来说一句

Exceptional C++ Style(chm和pdf)

2013年08月30日 2.64MB 下载

Exceptional C++ Style 中文版(免费)

2008年10月21日 12.28MB 下载

Exceptional C++ Style中文版(pdf)

2008年11月05日 12.28MB 下载

C++ 进阶 5E

2018年01月04日 36.18MB 下载

Exceptional C++ Style

2014年12月06日 3.02MB 下载

Exceptional C++ Style中文版

2014年10月08日 13.28MB 下载

Exceptional C++ Style中文版 pdf

2012年04月01日 13.98MB 下载

没有更多推荐了,返回首页

不良信息举报

Exceptional C++ Style之27

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭