标题:容器数据写入二进制文档
只看楼主
gtl75008810
Rank: 2
等 级:论坛游民
帖 子:29
专家分:71
注 册:2010-2-2
结帖率:100%
已结贴  问题点数:30 回复次数:8 
容器数据写入二进制文档
for (vector<uint32>::iterator iter=random_seq.begin();iter != random_seq.end(); ++iter)
    {
        cout<<*iter<<" ";
    }
    ofstream ofile("test",ios::binary);
    ofile.write((char *) &random_seq,random_seq.size()*sizeof(uint32));
    ofile.close();

   uint32 即unsigned long int
   以上代码,本人将vector<uint32> random_seq中的数据遍历输出并试图将其中所有数据输入一个二进制文档。可是问题是,我输出的数据是对的,可是检查二进制文档的数据却不一样了。不知道是否是在写文件时或者其它地方出错了?
   请高手指教哦!~~
搜索更多相关主题的帖子: 数据 容器 文档 二进制 
2010-03-15 14:16
gtl75008810
Rank: 2
等 级:论坛游民
帖 子:29
专家分:71
注 册:2010-2-2
得分:0 
回复 楼主 gtl75008810
例如,我容器中的数据直接输出是  4230842087(0xfc2d86e7) 2572731861(0x9958c5d5) 411631758(0xf559eece) 2469126111(0x932bdfdf)
可是我用ultraedit 检查的时候数据却是:0xcc cc cc cc ab 07 37 00 f8 07 37 00 28 08 37 00.
是写文件的时候的问题吗?
2010-03-15 14:27
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
得分:30 
(char *) &random_seq,写的是random_seq的地址?
2010-03-15 15:49
gtl75008810
Rank: 2
等 级:论坛游民
帖 子:29
专家分:71
注 册:2010-2-2
得分:0 
回复 3楼 秀痘魔导士
我认为是的。 其实就是想把所有在容器里面的无符号长整型数的二进制形式写进一个二进制文档。但是始终没有做对
2010-03-15 16:20
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
得分:0 
以下是引用gtl75008810在2010-3-15 16:20:13的发言:

我认为是的。 其实就是想把所有在容器里面的无符号长整型数的二进制形式写进一个二进制文档。但是始终没有做对
你的意思是,把容器里的无符号长整形数的地址存放到文件里?
如果是这样的话你这么写是不对的,因为vector在内存中的存放原理不是你想的那样。
2010-03-15 16:33
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
得分:0 

4230842087(0xfc2d86e7) 2572731861(0x9958c5d5) 411631758(0xf559eece) 2469126111(0x932bdfdf) 《----------------------这个是数据
0xcc cc cc cc ab 07 37 00 f8 07 37 00 28 08 37 00  <==============================这个是地址

为什么你觉得他们会相等?
2010-03-15 16:37
gtl75008810
Rank: 2
等 级:论坛游民
帖 子:29
专家分:71
注 册:2010-2-2
得分:0 
回复 6楼 秀痘魔导士
那个是地址啊~~ 额~~~
那我请教一下,怎么把容器里面的数的二进制形式依次存入一个二进制文档呢?
之前你所说的原理是否是指vector的内存不是连续的?
2010-03-15 21:37
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
得分:0 
iter = random_seq.begin();
ofile.write((char *) &(*iter),random_seq.size()*sizeof(uint32));

试一下?
vector在内存中应该是连续的
2010-03-16 09:13
gtl75008810
Rank: 2
等 级:论坛游民
帖 子:29
专家分:71
注 册:2010-2-2
得分:0 
vector中如果数据过多的话可能是不连续的,是链式存储吧~~
不过问题我已经解决了,希望以后有空可以交流编程方面的心得!
我的邮箱:gtl75008810@
欢迎不吝指教!
2010-03-16 17:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-299483-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.587650 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved