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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 @VFg XN  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 GS@ wG  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 pQD8#y)`C  
象当作char数组来处理。 WD]dt!V%  
template<class Container> #'T@mA  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, 8dfx _kY`/  
void, void> 3:RZ@~u=  
{ iC">F.9#  
public: oc.x1<Nd  
explicit bit_iterator(Container& c) : m_container(&c) (RF6K6~  
{ ;(A'XA4 6N  
m_size = 8*sizeof(Container); 4e4$AB"  
m_index = 0; eZHi6v)i  
} =Ur/v'm  
explicit bit_iterator() : m_container(0) fO+;%B  
{ va)\uXW.N  
m_size = 8*sizeof(Container); ~2H)#`\ac8  
m_index = m_size; Cv3H%g+as  
} ZtiOf}@i\  
bool operator* () &E~7ty'  
{ &fWZ%C7|jC  
char mask = 1; 71eD~fNdx  
char* pc = (char*)m_container; 8G=4{,(A  
int i   = (m_size-m_index-1)/8; `YJ`?p  
int off   = (m_size-m_index-1)%8; );C !:?  
mask <<=off; b^ZrevM  
return pc & mask; : &]%E/  
} : f Wh7X3  
bit_iterator<Container>& operator++() yl*S|= 8;k  
{ U i;o/Z3  
m_index++; `S2=LJ  
return *this; -$*YN{D+  
} }x+{=%~N  
bit_iterator<Container>& operator++(int) 9r!%PjNvE  
{ `8Gwf;P1  
m_index++; LY"/ Q  
return *this; [}Nfs3IlBw  
} GlaWBF#  
bool operator==(bit_iterator<Container>& bitIt) '#XP:nqFkK  
{ X~x]VKr/  
return m_index == bitIt.m_index; t C&Xm}:  
} b`IC)xN$  
bool operator!=(bit_iterator<Container>& bitIt) SYyH_0N  
{ rv^j&X+EH  
return !(*this == bitIt); f -#fi7  
} v{I:Wxe  
protected: dW91nTQ:  
Container* m_container; [KJm&\evp  
private: OLv(  
int m_size; edm&,ph]  
int m_index; =,sMOJ c>  
}; {It4=I)M  
?x:\RNB/  
用该迭代器可以将任意类型对象以二进制格式输出: _)ERi*}x8  
double a = 10; #3.\}d)  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
批量上传需要先选择文件,再选择上传
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八