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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 l RDxIuTK  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 V5a?=vK9  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 $(gGoL<  
象当作char数组来处理。 &Vt2be*  
template<class Container> &xiOTkqB  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, ;cI#S%uvpn  
void, void> i-,D_   
{ d=XpO*v,[  
public: dC` tN5  
explicit bit_iterator(Container& c) : m_container(&c) _1sMYhI  
{ L)F1NuR  
m_size = 8*sizeof(Container); 'j,oIqx  
m_index = 0; +2DE/wE]e+  
} BWUt{,?KU  
explicit bit_iterator() : m_container(0) j1YH9T#|D  
{ a@#Q:O)4  
m_size = 8*sizeof(Container); ]U,CKJF%/  
m_index = m_size; f xDj+Q1p  
} 8xF)_UV  
bool operator* () Wp5]Uk  
{ P8wy*JvT  
char mask = 1; ptpW41t}^  
char* pc = (char*)m_container; |3{+6cg  
int i   = (m_size-m_index-1)/8; f.oP   
int off   = (m_size-m_index-1)%8;  {l2N&  
mask <<=off; f=ac I|w  
return pc & mask; TMJ9~"IO  
} o]Wz6 L  
bit_iterator<Container>& operator++() (kIz  
{ pI7Ssvi^  
m_index++; X9fNGM1  
return *this; ,+tPRkwA^  
} 3J%V%}mD  
bit_iterator<Container>& operator++(int) q2e]3{l3  
{ bj@xqAGl  
m_index++; Q,.By&  
return *this; 3;*z3;#}  
} ?7 #7:  
bool operator==(bit_iterator<Container>& bitIt) 6b?`:$Cw3)  
{ <EMkD1e  
return m_index == bitIt.m_index; =m}TU)4.  
} __!m*!sd  
bool operator!=(bit_iterator<Container>& bitIt) Y@Y`gF6F  
{ Ic'Q5kfM  
return !(*this == bitIt); R]u (l+`  
} lv4(4$T  
protected: ]cIu|bRO  
Container* m_container; ~,ynJ]_aJB  
private: ./l|8o  
int m_size; .APVjqG  
int m_index; }A|))Ao|  
}; Wo{K}  
0G5'Y;8  
用该迭代器可以将任意类型对象以二进制格式输出: x>%joKY[  
double a = 10; E0QPE5_  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

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