2010-04-06 1 views
2

"Matlab에서 이진 파일을 읽고 쓰는"게시물을 읽었지만 여전히 의문점이 있습니다. 나는 C에서에 fwrite로 만든 긴 이중 값의 이진 파일을 가지고 vz3.dat 내 파일입니다 매트랩 나는Matlab에 C로 작성된 이진 파일 가져 오기

fid = fopen('vz3.dat', 'r') 
mydata = fread(fid, 'double') 

을 사용하고 있습니다. 하지만 Matlab에서 쓰레기 값을 얻고 있습니다.

[cinfo, maxsize, ordering] = computer 

에 따르면 Matlab에서 내 컴퓨터는 리틀 엔디안 시스템 (바이트 순서 시스템)입니다. 어떤 제안?

그런데 바이너리 파일은 반드시 .bin 형식으로 끝나야합니다. 확장자는 .dat입니다. 그렇게하는 것이 좋습니까?

감사합니다, 리틀 엔디안을 가진 파일을 열 그런데,

fid = fopen('vz3.dat','r','l'); 

파일이라는 것이 문제가되지 않는다 사용하려면

+0

내 경험에 의하면, 바이너리 파일은 원하는 모든 것을 끝낼 수 있습니다. 내 데이터 처리 중 일부는 .raw를 사용합니다. .dat 또는 .bin을 사용하면 혼동을 피할 수 있습니다. – Doresoom

+0

감사합니다. 나는 왜 무의식적으로 내가 dat에 갔는지 모르겠다 :) – yCalleecharan

답변

3

많은.

+0

고마워. 이제 효과가 있습니다. 나는 format long을 사용했다. fid = fopen ('vz3.dat', 'r', 'l'); mydata = fread (fid, 'double'). 내 다른 게시물 "이진 파일 인쇄 및 원하는 정밀도"를 참조하십시오. Matlab은 double을 처리 할 수 ​​있지만 long double은 처리 할 수 ​​없다고합니다. – yCalleecharan

+0

@yCalleecharan :'long double'은 표준 정밀도 이름이 아닙니다. 아마도 C++ 컴파일러에서 (구현 종속적 인) C++ 데이터 유형 'long double'에 사용 된 표현을 의미할까요? 툴체인에 대해 더 많이 알 필요가 있지만 일반적인 용의자는 64 비트 IEEE 및 80 비트 x87 형식입니다. –

0

파일 핸들을 다른 곳에서 사용해야하는 경우 fread (선택 사항)에 machineformat 매개 변수를 사용할 수도 있습니다.

설명서는 on the MathWorks site입니다.