2012-03-13 4 views
1

바이너리 파일은 정상적으로 작동하지 않으므로 이에 대한 대답이 명확하다면 사과드립니다. 나는 다음과 같은 명령을 사용하여 특정 이진 파일에서 잘 읽을 수 있어요 :C : 바이너리 파일 읽기

nread = fread(&data[0],sizeof(float),maxpts,fptr); 

바이너리는 표준 과학 형식이며,이 데이터가 수레로 저장됩니다 것으로 보인다. 그러나이 데이터를 double 형식의 배열로 읽는 것을 선호합니다. 단순히 데이터 형식을 double (float)으로 전환하고 sizeof (float)를 그대로두면 데이터가 올바르게 검색되지 않습니다. . 이 일을 어떻게 하죠? 고마워, 잭.

답변

3

데이터를 플로트로 읽은 다음 대량 할당으로 변환해야합니다 (예 : 플로트 배열을 읽고 두 배로 배열하고 각 요소에 대해 doubleArray[i] = floatArray[i]으로 설정).

플로트와 더블의 저장에 대한 특정 사실을 사용하여이 프로세스를 가속화 할 수있는 방법이 있지만, 특히 미묘한 부정확성을 유발할 수 있으므로 그만한 가치는 없습니다.

+0

감사합니다. – zach

2

데이터를 float 정밀도로 읽은 다음 double 형 배열을 할당하고 for 루프를 사용하여 수동으로 double 형 배열을 채울 수 있습니다.

내 오래된 질문에 기본적으로

How can I perform conversion from float -> double -> float when processing an audio buffer in c++ 중 하나를 참조하십시오. .

doubleArray=malloc(numElements*sizeof(double)); 
for (int nn=0; nn<numElements; ++nn) 
{ 
    doubleArray[nn] = floatArray[nn]; 
}