关闭

Exceptional C++ Style之27

573人阅读 评论(0) 收藏 举报
第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的位容器,看上去很不错,我也很喜欢。附上代码,以后用的机会可能也不会很多吧。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:611966次
    • 积分:9781
    • 等级:
    • 排名:第1777名
    • 原创:340篇
    • 转载:141篇
    • 译文:0篇
    • 评论:69条
    最新评论