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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 CaX&T2(  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 w8:~LX.n  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 1tHTjEG4^3  
象当作char数组来处理。 8QV+DDZx  
template<class Container> -8X* (7  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, ;]3Tuq  
void, void> ,YX[6eZr  
{ N93 ZI|T  
public: kep.+t[  
explicit bit_iterator(Container& c) : m_container(&c) ~v$gk   
{ Z#IRNFj  
m_size = 8*sizeof(Container); 8 C@iD%  
m_index = 0; ^|5bK_Z&  
} )s4#)E1  
explicit bit_iterator() : m_container(0) O:"gJ4D  
{ ;]34l."85  
m_size = 8*sizeof(Container); m;)[gF  
m_index = m_size; a*o#,T5A  
} }@_F( B  
bool operator* () Ouc=4'$-  
{ K]yCt~A$  
char mask = 1; W! v8'T  
char* pc = (char*)m_container; H.qp~-n  
int i   = (m_size-m_index-1)/8; m7Nm!Z7  
int off   = (m_size-m_index-1)%8; ]e@'9`G-'  
mask <<=off; P(8zJk6h),  
return pc & mask; %,Xs[[?i  
} N%'=el4L  
bit_iterator<Container>& operator++() *aT3L#0(  
{ 3#}5dO  
m_index++; ?u{y[pI6  
return *this; cd)yj&:?Bt  
} %Ak"d+OH4  
bit_iterator<Container>& operator++(int) pi[:"}m]/P  
{ /xj^TyWM  
m_index++; SsiAyQ|Ma  
return *this; r%A-  
} c&z@HEzV7  
bool operator==(bit_iterator<Container>& bitIt) )"s <hR ,  
{ eL[BH8l  
return m_index == bitIt.m_index; h lD0^8S  
} 7Rqjf6kX`O  
bool operator!=(bit_iterator<Container>& bitIt) s|.V:%9e  
{ $q.% 4  
return !(*this == bitIt); H]K(`)y}4  
} Q"n|<!DN  
protected: (E )@@p7,:  
Container* m_container; @JVax-N  
private: ZNNgi@6>  
int m_size; N '2Nv  
int m_index; RZi]0l_A'  
}; }D j W  
#)QR^ss)iw  
用该迭代器可以将任意类型对象以二进制格式输出: yyb8l l?@a  
double a = 10; NCbn<ojb  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
欢迎提供真实交流,考虑发帖者的感受
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八