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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 8 *4@-3Sx  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 2x7(}+eD  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 uI%N?  
象当作char数组来处理。 E/"YId `A  
template<class Container> i&A{L}eCr:  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, |Hx%f  
void, void> /~H[= Pf  
{ 3[MdUj1y[  
public: MZCL:#  
explicit bit_iterator(Container& c) : m_container(&c) <MPeh&_3#  
{ 6@"Vqm|HD  
m_size = 8*sizeof(Container); j4E H2v  
m_index = 0; 8ku? W  
} I#i?**  
explicit bit_iterator() : m_container(0) T{_1c oL  
{ _ oQtk^fp  
m_size = 8*sizeof(Container); sx-EA&5-9k  
m_index = m_size; [:AB$l*  
} [NQmL=l  
bool operator* () BhqhyX\D&y  
{ L_tjcfVo  
char mask = 1; z[WC7hvU  
char* pc = (char*)m_container; 5."5IjZu  
int i   = (m_size-m_index-1)/8; ]XmQ]Yit  
int off   = (m_size-m_index-1)%8; zt7_r`#z  
mask <<=off; Z 6 tE{/  
return pc & mask; kxwNbxC  
} /6Y0q9  
bit_iterator<Container>& operator++() RxlszyE  
{ ]b}B~jD  
m_index++; W\HLal  
return *this; zx ct(  
} BmJkt3j."  
bit_iterator<Container>& operator++(int) q!ee g  
{ *y)4D[ z-  
m_index++; $8jaapNm@  
return *this; 6a7vlo  
} ?lF mXZy`  
bool operator==(bit_iterator<Container>& bitIt) H":/Ckok  
{ \s,Iz[0Vfz  
return m_index == bitIt.m_index; ]PeLcB  
} )V=0IZi  
bool operator!=(bit_iterator<Container>& bitIt) U$A/bEhw  
{ 5i|s>pD4z1  
return !(*this == bitIt); iwvt%7  
} l+t #"3  
protected: g4Y) Bz  
Container* m_container; :qBGe1Sv(  
private: :*#rRQ>t  
int m_size; f(!E!\&n^  
int m_index; pQqbZ3]  
}; {W-5:~?"  
6*sw,sU[y  
用该迭代器可以将任意类型对象以二进制格式输出: kzMa+(fu  
double a = 10; t @;WgIp(&  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

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