2012-08-01 2 views
1

나는 3236 바이트의 이진 데이터를 가리키는 유형 uint8_t * ptr 유형의 포인터가 있습니다. 내 포인터가 가리키는 내용을 C++의 파일로 인쇄하고 싶습니다. 나는 길이가 난 그냥 보여 주었다 때문에 가리키는 PTR 내용을 인쇄 할 수 있도록 내가 할 수있는 방법, 나는 8 바이트의 데이터를 얻을 수 있습니다 내가파일에 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)); 

즉 바이너리 모드로 갈거야 인가 파일에서 32 바이트의 데이터를 가리키는 동안

+0

당신이 fp.write'로 잘못에 대해 어떻게 생각하십니까 ((의 char *) PTR, 32) ;'? – jahhaj

답변

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

+0

또한 바이너리 데이터를 처리 할 때 streambuf/filebuf가 서식 지정 지향 ostream/ofstream보다 더 편리합니다. – DanielKO

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