Parse a binary file with different number formats

Hi, I have a binary file representing a surface, there is a header which provides some info about the surface like sampling rates along x and y axis, number of rows and columns and so on... then there is a series of values which represent values along z axis.
The header is made of short, long and float number formats while z values are in floats. An example can be this:
\\ HEADER:
-float (type of figure)
-long (number of rows)
-long (number of columns)
-float (x sampling rate)
-float (y sampling rate)
-float (x origin)
-float (y origin)
...... //end of header
float z1
float z2
float z3
and so on
How can I retrieve all the values scanning the file? I tried with fread but I don't know which format option choose
Thanks

 採用された回答

Jan
Jan 2017 年 12 月 14 日
編集済み: Jan 2017 年 12 月 14 日

0 投票

The documentation explains this clearly: doc fread
fid = fopen(File);
if fid == -1, error('Cannot open file %s', File); end
typeOfFigure = fread(fid, 1, 'float'); % -float (type of figure)
numOfRows = fread(fid, 1, 'long'); % -long (number of rows)
numOfCols = fread(fid, 1, 'long'); % -long (number of columns)
xSampleRate = fread(fid, 1, 'float'); % -float (x sampling rate)
ySampleRate = fread(fid, 1, 'float'); % -float (y sampling rate)
xOrigin = fread(fid, 1, 'float); % -float (x origin)
yOrigin = fread(fid, 1, 'float); % -float (y origin)
...
fclose(fid);
Looks trivial, doesn't it?
I'd prefer 'int32' instead of 'long', 'int16' instead of 'short' and 'single' instead of 'float', but this is only for clarity.

1 件のコメント

Antares
Antares 2017 年 12 月 14 日
Wow! I didn't expect to be so simple
Thanks!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeSurfaces, Volumes, and Polygons についてさらに検索

タグ

質問済み:

2017 年 12 月 14 日

コメント済み:

2017 年 12 月 14 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by