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

以二进制格式输出对象

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 Al;oI3  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 ?v*7!2;  
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 4C*=8oe_  
象当作char数组来处理。 nqW:P$  
template<class Container> Q/SC7R&"t  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, 6R,b 8  
void, void> YuuG:Kk  
{ [Cr~gd+ q  
public: 8-#2?=  
explicit bit_iterator(Container& c) : m_container(&c) *y$ry]  
{ E^ti !4{<  
m_size = 8*sizeof(Container); \?I wR]@y  
m_index = 0; \X p"I5  
} {N`<e>A]{  
explicit bit_iterator() : m_container(0) +=xRr?F  
{ f@X*Tlx^|  
m_size = 8*sizeof(Container); _\6(4a`,  
m_index = m_size; M?CMN.Dw  
} ph+tk5k  
bool operator* () tOVm~C,R  
{ 0(6`dr_  
char mask = 1; gx.]4 v  
char* pc = (char*)m_container; 3Q"+ #Ob  
int i   = (m_size-m_index-1)/8; Tj~#Xc  
int off   = (m_size-m_index-1)%8; sm S0Rk  
mask <<=off; M)RQIl5  
return pc & mask; Q2PwO;E.`C  
} NGzqiu"J  
bit_iterator<Container>& operator++() {iteC  
{ 1Ac1CsK*  
m_index++; g0$k_  
return *this; f@g  
} n#,l&Bx  
bit_iterator<Container>& operator++(int) u{ d`  
{ (pg9cM]NA  
m_index++; (LPc\\Vv  
return *this; b DvbM  
} eF\C?4  
bool operator==(bit_iterator<Container>& bitIt) <5^(l$IBj  
{ 2geC3v% 0o  
return m_index == bitIt.m_index; Hvk?(\x  
} 2J;CiEB  
bool operator!=(bit_iterator<Container>& bitIt) Z}f_\d'  
{ B\yq% m  
return !(*this == bitIt); V0(ABi:d  
} 1\kehCt  
protected: u'."E7o#  
Container* m_container; GC3L2C0)k  
private: 8B9zo&  
int m_size; 4Fq}*QJ-  
int m_index; 3I(M<sB}  
}; n-Y'LK40Os  
0&~u0B{  
用该迭代器可以将任意类型对象以二进制格式输出: >c eU!=>  
double a = 10; 3!W&J  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

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