注册 登录
编程论坛 C++教室

容器数据写入二进制文档

gtl75008810 发布于 2010-03-15 14:16, 1232 次点击
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中的数据遍历输出并试图将其中所有数据输入一个二进制文档。可是问题是,我输出的数据是对的,可是检查二进制文档的数据却不一样了。不知道是否是在写文件时或者其它地方出错了?
   请高手指教哦!~~
8 回复
#2
gtl750088102010-03-15 14:27
回复 楼主 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.
是写文件的时候的问题吗?
#3
秀痘魔导士2010-03-15 15:49
(char *) &random_seq,写的是random_seq的地址?
#4
gtl750088102010-03-15 16:20
回复 3楼 秀痘魔导士
我认为是的。 其实就是想把所有在容器里面的无符号长整型数的二进制形式写进一个二进制文档。但是始终没有做对
#5
秀痘魔导士2010-03-15 16:33
以下是引用gtl75008810在2010-3-15 16:20:13的发言:

我认为是的。 其实就是想把所有在容器里面的无符号长整型数的二进制形式写进一个二进制文档。但是始终没有做对
你的意思是,把容器里的无符号长整形数的地址存放到文件里?
如果是这样的话你这么写是不对的,因为vector在内存中的存放原理不是你想的那样。
#6
秀痘魔导士2010-03-15 16:37

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

为什么你觉得他们会相等?
#7
gtl750088102010-03-15 21:37
回复 6楼 秀痘魔导士
那个是地址啊~~ 额~~~
那我请教一下,怎么把容器里面的数的二进制形式依次存入一个二进制文档呢?
之前你所说的原理是否是指vector的内存不是连续的?
#8
秀痘魔导士2010-03-16 09:13
iter = random_seq.begin();
ofile.write((char *) &(*iter),random_seq.size()*sizeof(uint32));

试一下?
vector在内存中应该是连续的
#9
gtl750088102010-03-16 17:43
vector中如果数据过多的话可能是不连续的,是链式存储吧~~
不过问题我已经解决了,希望以后有空可以交流编程方面的心得!
我的邮箱:gtl75008810@
欢迎不吝指教!
1