社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 3243阅读
  • 0回复

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 eT+i &  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 T? Kh '  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 WW+xU0  
象当作char数组来处理。 -=nk,cYn  
template<class Container> u"q5 6}Q?]  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, vP x/&x  
void, void> ~v%6*9  
{ ?V,q&=9  
public: uLafO=Q  
explicit bit_iterator(Container& c) : m_container(&c) w%.hALN5-C  
{ X8VBs#tLE  
m_size = 8*sizeof(Container); /i3 JP}  
m_index = 0; )O"E#%  
} Qn7T{ BW  
explicit bit_iterator() : m_container(0) 5]>*0#C S  
{ a;t}'GQGk  
m_size = 8*sizeof(Container); ._^}M<o L  
m_index = m_size; 0W(mx-[H/  
}  ][wb4$2  
bool operator* () ]R_R`X?  
{ n9xP8<w8  
char mask = 1; Iz1x|EQ  
char* pc = (char*)m_container; [a04( 2g  
int i   = (m_size-m_index-1)/8; `p&[b]b  
int off   = (m_size-m_index-1)%8; >*RU:X  
mask <<=off; Hl`OT5 pNf  
return pc & mask; HD^#"  
} `wXK&R<`  
bit_iterator<Container>& operator++() W w,\s5Uw  
{ }9+;-*m/  
m_index++; uR ?W|a  
return *this; j@>D]j  
} q0NFz mG  
bit_iterator<Container>& operator++(int) W}f)VC;D  
{ }:m/@LKB  
m_index++; ux<|8S  
return *this; o5bp~.m<  
} 1ZI1+TDH  
bool operator==(bit_iterator<Container>& bitIt) M@R"-$Z  
{ S3\NB3@qC&  
return m_index == bitIt.m_index; eCYPd-d  
} Fp/{L  
bool operator!=(bit_iterator<Container>& bitIt) C3}:DIn"w  
{ >G:Q/3jh  
return !(*this == bitIt); H].|K/-p  
} 1Ng+mT  
protected: >\d&LLAe  
Container* m_container; =p8uP5H  
private: BB6[(Z  
int m_size; ^O18\a  
int m_index; I.n,TJoz4J  
}; xvV";o  
BM<q;;pO  
用该迭代器可以将任意类型对象以二进制格式输出: _K o#36.S  
double a = 10; k ucbI_  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八