2012-08-01 32 views
1

我有一个类型为uint8_t * ptr类型的指针,指向大约32个字节的二进制数据。 我想将指针指向的内容打印到C++中的文件中。 我用二进制模式会即将uint8_t类型写入文件C++

ofstream fp; 
fp.open("somefile.bin",ios::out | ios :: binary); 
//fp.write(here is the problem) 
fp.write((char*)ptr,sizeof(ptr)); 

有没有一种方法,我可以做到这一点,让我打印出PTR指向,因为这样我刚才显示的内容,我得到的8个字节的数据在指向32字节数据的文件中。

+0

你认为是错的'fp.write((字符*)PTR,32) ;'? – jahhaj 2012-08-01 18:59:29

回答

7

由于计算机上的指针是64位的,因此会得到8个字节。因此,sizeof(ptr)返回8 - 你得到指针的大小,而不是数组的大小。你应该传递数据的大小,以一起写指针,例如,像这样:

uint8_t data[32]; 
// fill in the data... 
write_to_file(data, sizeof(data)); 

void write_to_file(uint8_t *ptr, size_t len) { 
    ofstream fp; 
    fp.open("somefile.bin",ios::out | ios :: binary); 
    fp.write((char*)ptr, len); 
} 
+0

很多答案,迄今为止这是唯一正确的答案。 – Chad 2012-08-01 18:21:45

+0

另外,在处理二进制数据时,streambuf/filebuf比面向格式化的ostream/ofstream更方便。 – DanielKO 2012-08-01 19:53:05

0
double pi = 3.1415926535; // IEEE 8 bytes 
uint8_t bytes[8] = { 0 }; 
double* dp = (double*)(&bytes[0]); //force dp to point to bytes 
*dp = pi; // copies pi into bytes 
file.write((char*)dp,sizeof(bytes));