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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 5Ocd2T'  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 /%El0X  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 gk"0r\Eq  
象当作char数组来处理。 L*;XjacI]  
template<class Container> 4 1w*<{Lk  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, r:[N#*kK  
void, void> 7+I%0U}m  
{ 9ghZL Q  
public: ttazY#  
explicit bit_iterator(Container& c) : m_container(&c) ~]+-<O^U~  
{ }LXS!Ff:  
m_size = 8*sizeof(Container); 3=6`'PKRQ  
m_index = 0; 1`t4wD$/  
} mcbr3P  
explicit bit_iterator() : m_container(0) ~i`@  
{ u"rK5'  
m_size = 8*sizeof(Container);  tCT-cs  
m_index = m_size; -P|EV|8=  
} [x`trypg  
bool operator* () l[KFK%?  
{ Y)?dq(  
char mask = 1; Z3:M%)e_u$  
char* pc = (char*)m_container; I6bekOvP  
int i   = (m_size-m_index-1)/8; <SiD m-=E  
int off   = (m_size-m_index-1)%8; 7@[3]c<=  
mask <<=off; bjgf8427I  
return pc & mask; 4nC`DJ;V  
} p&B c<+3e  
bit_iterator<Container>& operator++() jft%\sY  
{ a&>Tk%  
m_index++; %+PWcCmn  
return *this; J. ]~J|K  
} b`x7%?Qn  
bit_iterator<Container>& operator++(int) P3w]PG@  
{  2C9wOO  
m_index++; :}r^sD  
return *this; nWTo$*>W  
} HOWm""IkB  
bool operator==(bit_iterator<Container>& bitIt) S@AHI!"h=V  
{ g[VVxp!C<  
return m_index == bitIt.m_index; R<}WNZl  
} E0K'|*  
bool operator!=(bit_iterator<Container>& bitIt) $=>(7 =l_  
{ P4"Pb\o*  
return !(*this == bitIt); B7:8%r/  
} %GRD3S  
protected: |aH;@V  
Container* m_container; j@4 yRl ^  
private: %O 5 k+~9  
int m_size; txF)R[dZK  
int m_index; `;[ j`v8O  
}; @agW{%R:.  
uZsm=('ww  
用该迭代器可以将任意类型对象以二进制格式输出: 1<hj3  
double a = 10; ^i3~i?\,P  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八