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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 30s; }  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 HmMO*k<6@  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 fN@{y+6  
象当作char数组来处理。 :5J_5,?;`  
template<class Container> h h"h j  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, 5Q W}nRCZ  
void, void> w9MoT.kI}  
{ PQ$sOK|/  
public: {{\ce;hN  
explicit bit_iterator(Container& c) : m_container(&c) V7EQ4Om:It  
{ 4ZwKpQ6  
m_size = 8*sizeof(Container); TkRmV6'w  
m_index = 0; Xd3}Vn=  
} A (okv  
explicit bit_iterator() : m_container(0) A|L'ih/  
{ ]W/>Ldv  
m_size = 8*sizeof(Container); !J3UqS  
m_index = m_size; /,2rjJ#b  
} YHB9mZi  
bool operator* () RO.U(T  
{ H>XFz(LWh  
char mask = 1; 2 o4^  
char* pc = (char*)m_container; uR$i48}  
int i   = (m_size-m_index-1)/8; H;Ku w  
int off   = (m_size-m_index-1)%8; :5b0np!  
mask <<=off; GSi>l,y'  
return pc & mask; vcv CD7MD  
} C h19h8M  
bit_iterator<Container>& operator++() >P=Q #;v  
{ d|lpec  
m_index++; Yf}xwpuLk  
return *this; i{Ds&{  
} ]Y`Ib0$  
bit_iterator<Container>& operator++(int) ]{GDS! )  
{ }r%X`i|  
m_index++; e#S0Fk)z  
return *this; esX)"_xf  
} _las;S'oa  
bool operator==(bit_iterator<Container>& bitIt) -oP'4QVb  
{ =r 9r~SR#  
return m_index == bitIt.m_index; b~w=v_[(I  
} /.1. MssQM  
bool operator!=(bit_iterator<Container>& bitIt) %IY``r)j  
{ ypdT&5Mqb!  
return !(*this == bitIt); =0    
} mJ}opy!{;  
protected: C\*4q8(  
Container* m_container; +>\id~c(  
private: . (}1%22  
int m_size; `5~3G2T  
int m_index; i+{yMol1  
}; j)C:$  
.@F]Pht  
用该迭代器可以将任意类型对象以二进制格式输出: ,9D+brm  
double a = 10; _iV]_\0W2  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

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