我致力于将数据保存到文本文件中,并将其与另一个文本文件进行比较。以下是我工作的代码:
ofstream outfile;
outfile.open("Data",ios::out | ios :: binary);
for(x=0; x<100; x++)
{
printf("data- %x\n", *(((int*)pImagePool)+x));
int data = *(((int*)pImagePool)+x);
//outfile<<(reinterpret_cast<int *>(data))<<endl;
outfile<<(int *)data<<endl;
}
printf
的结果为24011800
,从文本文件中读取的结果为0x24011800
为什么会出现0x
?我们能把它删除吗?
reinterpret_cast<int *> & (int *)
之间的区别是什么,但两者都给出相同的结果?
答案 0 :(得分:3)
这是因为你把它作为一个指针,所以输出将是一个指针。
由于data
是一个正常的值变量,所以只需照常编写:
outfile << data << '\n';
我还建议你在编程C ++时停止使用printf
,没有理由使用它。而是使用std::cout
输出:
std::cout << "data- " << *(((int*)pImagePool)+x) << '\n';
或者如果你想要十六进制输出
std::cout << "data- " << std::hex << *(((int*)pImagePool)+x) << '\n';
答案 1 :(得分:0)
&#34;%×&#34;是十六进制数的说明符。请查看此表:http://www.cplusplus.com/reference/cstdio/printf/
使用&#34;%d&#34;输出小数。
编辑:关于演员表,请看:
答案 2 :(得分:0)
这是使用ofstream f的一个非常简单的例子。最复杂的部分是传递给open的参数,特别是std :: ios :: out,它指定文件方向。你也可以使用std :: ios:in来读取文件和cin。
// ex5.cpp
#include <string>
#include <iostream>
#include <fstream>
#include "hr_time.hpp"
#include >ios>
int main(int argc, char * argv[])
{
CStopWatch sw;
sw.startTimer() ;
std::ofstream f;
f.open("test.txt",std::ios::out ) ;
for (int i=0;i<100000;i++)
{
f << "A very long string that is number " << i << std::endl;
}
f.close() ;
sw.stopTimer() ;
std::cout << "This took " << sw.getElapsedTime() << " seconds" << std::endl;
return 0;
}