MATLAB
코드 조각을 각각 JAVA
으로 바꾸는 데 상당히 문제가 있습니다. 다음Java에서 이진 파일 쓰기
MATLAB
에서 작동 그러므로
fid = fopen('test.wnd','w');
fwrite(fid, -99, 'int16');
fwrite(fid, 7, 'int16');
fwrite(fid, 92, 'int32');
fwrite(fid, 3, 'int32');
fwrite(fid, 75.0, 'float32');
fwrite(fid, 75.0, 'float32');
fwrite(fid, 3.0, 'float32');
fwrite(fid, 2048, 'int32');
fwrite(fid, 8.0, 'float32');
fwrite(fid, 0, 'float32');
fwrite(fid, 0, 'float32');
fwrite(fid, 340.2, 'float32');
fwrite(fid, 0, 'int32');
fwrite(fid, 12, 'int32');
fwrite(fid, 3, 'int32');
fwrite(fid, 3, 'int32');
fwrite(fid, 0, 'float32');
fwrite(fid, 0, 'float32');
fwrite(fid, 113.4, 'float32');
fwrite(fid, 0, 'float32');
fwrite(fid, 0, 'float32');
fwrite(fid, 27.72, 'float32');
fwrite(fid, 12, 'float32');
fwrite(fid, 340.2, 'float32');
Scale = [1.0 .8 .5];
Offset = [8.0 0 0];
v = zeros(3*3,1);
for it = 1:nt
cnt = 1;
for iz = 1:nz
for iy = y_ix
for k=1:nffc
v(cnt) = ((velocity(it,k,iy,iz) - Offset(k))/Scale(k)*1000);
cnt = cnt + 1;
end %for k
end %iy
end % iz
fwrite(fid_wnd, v, 'int16');
end %it
fclose(fid);
, JAVA
에서이 시도 :
DataOutputStream dos = new DataOutputStream(new FileOutputStream("C:/Users/fperrone/Desktop/test.wnd"));
dos.writeShort(-99);
dos.writeShort(7);
dos.writeInt(92);
dos.writeInt(3);
dos.writeFloat((float)75.0);
dos.writeFloat((float)75.0);
dos.writeFloat((float)2.4);
dos.writeInt(2048);
dos.writeFloat((float)8.0);
dos.writeFloat((float)0);
dos.writeFloat((float)0);
dos.writeFloat((float)340.2);
dos.writeInt(0);
dos.writeInt(67);
dos.writeInt(3);
dos.writeInt(3);
dos.writeFloat((float)0);
dos.writeFloat((float)0);
dos.writeFloat((float)113.4);
dos.writeFloat((float)0);
dos.writeFloat((float)0);
dos.writeFloat((float)27.72);
dos.writeFloat((float)12);
dos.writeFloat((float)340.2);
double[] Offset = {8.0, 0.0, 0.0};
double[] Scale = {1.0, .8, .5};
short v[] = new short[9];
for(int it = 0; it < 4096; ++it){
for(int comp = 0; comp < 3; ++comp){
int count = 0;
for(int iy = 0; iy < 3; ++iy){
for(int iz = 0; iz < 3; ++iz){
v[count] = (short) ((test[it][comp][iy][iz] - Offset[comp])/Scale[comp]*1000);
dos.writeShort(v[count]);
count += 1;
}
}
}
}
dos.close();
중요한 점은 난과 JAVA
출력을 연결할 때 바이너리 파일이 의미하는 소프트웨어입니다.이 소프트웨어는 아무 정보도 읽지 않으며, MATLAB
출력이 다시 나타납니다. 광고를 완벽하게 예상대로
무엇이 누락 되었습니까?
Java 결과 바이너리와 MATLAB 결과 바이너리를 비교 했습니까? 그것은 엔디 언이나 그런 헛소리 일 수 있습니까? – Shark
첫 번째 '7'(matlab의 int16) – resueman
에 대한 writeShort()가 오타였던 경우 writeInt()를 사용하는 것이 좋습니다. – fpe