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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 <A{|=2<  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 YbaaX{7^  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 V<X[>C'  
象当作char数组来处理。 ;pk4Voo$  
template<class Container> 8<BYAHY^  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, #-76E  
void, void> vW`Dy8`06  
{ "B18|#v  
public: L eg)q7n  
explicit bit_iterator(Container& c) : m_container(&c) >uVo 'S.  
{ ~s.~X5  
m_size = 8*sizeof(Container); Yj%hgb:)  
m_index = 0; DK' ? '  
} ?:@13wm  
explicit bit_iterator() : m_container(0) |wF_CZ*1  
{ P2HR4`c  
m_size = 8*sizeof(Container); 5u/dr9n  
m_index = m_size; R]{zGFnx  
} \o-9~C\c*  
bool operator* () r\#_b4-v3h  
{ ZJL8"(/R  
char mask = 1; _v~c3y).  
char* pc = (char*)m_container; +ucj>g1(#  
int i   = (m_size-m_index-1)/8; G- _h 2  
int off   = (m_size-m_index-1)%8; #G</RYM~m  
mask <<=off; xBba&A]=  
return pc & mask; [k1N-';;;  
} h"~i&T h  
bit_iterator<Container>& operator++() m9yi:zT%  
{ ?'RB)M=Og7  
m_index++; E?\&OeAkO  
return *this; n7Em t$Hi>  
} GnAG'.t-Z  
bit_iterator<Container>& operator++(int) rGa@!^hk  
{ Ck`-<)uN  
m_index++; E}^np[u7  
return *this; w;;yw3  
} <x&0a$I  
bool operator==(bit_iterator<Container>& bitIt) ie<zc+*rW  
{ tX'`4!{@+  
return m_index == bitIt.m_index; a1^CpeG~  
} h%4aL38  
bool operator!=(bit_iterator<Container>& bitIt) \!O3]k,r  
{ UA>3,|gV1  
return !(*this == bitIt); i}&&rr  
} P{T\zT  
protected: }kJfTsFS  
Container* m_container; gMXs&`7P  
private: _*&I[%I5  
int m_size; &,v- AL$:Q  
int m_index; E6 g]EE  
}; o!6~tO=%  
j-~x==c-;  
用该迭代器可以将任意类型对象以二进制格式输出: %}.4c8  
double a = 10; Iax-~{B3AY  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
认证码:
验证问题:
10+5=?,请输入中文答案:十五