0
기본적으로 Matlab 코드를 C++로 변환하려고 시도합니다. 이진 파일을 읽으면 실제로 어떻게 보이는지 모르겠습니다.C++ "ieee-be"machinefmt가있는 이진 파일 읽기
다음과 같이 matlab에 코드 단순화 : 결국
x=zeros(48,32);
fid=fopen('pres_00.bin','r','ieee-be');
fseek(fid,ipos,'bof');
x(1:4:48,:)=fread(fid,[12,32],'single');
우리가 기본적으로 내가 읽을 수있는 방법은 x 배열 (행 1, 5, ..)
더블 번호를 얻을 * .bin 파일을 C++로? 나는 시도 :
file1.seekg(0, ios::end);
int length = file1.tellg();
file1.seekg(ipos, ios_base::beg);
lenght = lenght - ipos;
char * buffer = new char[length];
file1.read(buffer, length);
double* double_values = (double*)buffer;
double test = double_values[0];
file1.close();
는 안타깝게도 "테스트"는 이진 파일에서 인코딩되는 숫자 MATLAB과 유사하지 않다. ieee-be 인코딩을 사용하여 정보를 C++로 구현하려면 어떻게해야합니까? 불행히도 바이너리 파일에 익숙하지 않습니다 ...
건배와 도움에 감사드립니다!
// 편집 :
는 아마 도움이 : 내 경우
ipos = 0
the first hex row (offset0) (32) :
44 7C CD 35 44 7C AD 89 44 7C E9 F2 44 7D F7 10 44 7D 9C F9 44 7B F9 E4 44 7B 3E 1D 44 7B 6C CE
ANSI: D|Í5D|.‰D|éòD}÷.D}œùD{ùäD{>.D{lÎ
First value in Matlab: 1.011206359863281e+03
What my Code reads in buffer: D|Í5D|-‰.D|éòD}÷.\x10D}œùD{ùäD{>\x1dD{lÎ......
double test = -4.6818882332480884e-262
내가 당신의 MATLAB 코드는 '하나'정밀도 (32 비트) 그래서 플로트 아닌 더블을 읽고 생각합니다. float 배열로 읽어보십시오. –
@johnelemans는 절반에 불과하지만 나머지 절반은 'be'가 아마도 사용되는 대부분의 CPU와 반대되는 빅 엔디안 (big-endian)을 의미 할 것입니다. –