2014-03-26 125 views
0

我正在将数据保存到文本文件中,并将其与另一个文本文件进行比较。下面是我的工作代码:将Int数据保存到C++中的文本文件中

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;  
    } 

结果从printf24011800和文本文件的结果读取0x24011800

为什么有0x出现?我们能够移除它吗?

reinterpret_cast<int *> & (int *)之间的区别是什么,但都给出了相同的结果?

回答

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'; 
+0

+1停止使用printf。 – Ben

0

这是使用ofstream的F A很简单的例子。最复杂的部分是传递给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; 
} 
相关问题