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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 zHk7!|%Y  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 hLF;MH@  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 L1YiXJ,T,  
象当作char数组来处理。 b?nORWjC  
template<class Container> POt 8G  
class bit_iterator : public std::iterator<bidirectional_iterator_tag,  NH0uK  
void, void> Pj{Y  
{ 40Hm+Ge  
public: i;mA|  
explicit bit_iterator(Container& c) : m_container(&c) ;cp,d~mrf  
{ H/N4t Wk"  
m_size = 8*sizeof(Container); go B'C  
m_index = 0; 6"<q{K  
} a+P Vi  
explicit bit_iterator() : m_container(0) ] 8dzTEjk  
{ ^!sIEL  
m_size = 8*sizeof(Container); %2^wyVkq:  
m_index = m_size; bW^JR,  
} ,WQg.neOA  
bool operator* () 0UOjk.~b  
{ ]1&} L^a  
char mask = 1; 67T=ku  
char* pc = (char*)m_container; #9CLIYJAd  
int i   = (m_size-m_index-1)/8; N Nw0 G&  
int off   = (m_size-m_index-1)%8; olca Z  
mask <<=off; .T\_4C  
return pc & mask; osZ] R  
} Q%n$IQr4gM  
bit_iterator<Container>& operator++() 'e:(61_  
{ 3V%ts7:a  
m_index++; }0~X)Vgm(  
return *this; g[$4a4X  
} zLybf:#  
bit_iterator<Container>& operator++(int) MZ"|Jn  
{ Js/QL=,  
m_index++; 66-G)+4  
return *this; )SyU  
} njckPpyb@  
bool operator==(bit_iterator<Container>& bitIt) |(3"_  
{ 5[Uv%A?H#_  
return m_index == bitIt.m_index; :s>x~t8g#n  
}  4}F~h  
bool operator!=(bit_iterator<Container>& bitIt) S<eB&qT$  
{ f[wxt n'r  
return !(*this == bitIt); qB5.of[N!  
} lb\VQZp!y  
protected: r1/9BTPKdJ  
Container* m_container; FA!!S`{\  
private: l;i /$Yu7  
int m_size; #eIFRNRb)  
int m_index; h&2l0 |8k  
}; aKz:hG  
`T3B  
用该迭代器可以将任意类型对象以二进制格式输出: ^MO})C  
double a = 10; ,-[z?dvO  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八