MATLAB Answers

fwrite to fread changes data completely!

20 views (last 30 days)
hello_world
hello_world on 9 Jul 2016
Edited: per isakson on 9 Jul 2016
Hello Friends,
I have a Vector or some length, say, 1 x N with real number entries.
I want to save this vector by using "fwrite" and then read it using "fread". I did the following:
fileID = fopen(Name, 'w');
fwrite(fileID, Vector, 'double', [number_of_rows number_of_columns]);
%Here [number_of rows number_of_cols] = size(Vector);
fclose(fileID);
In workspace, Vector shows of type 'double'
Next, for reading it, I did the following:
fid = fopen(path_to_vector, 'r');
output = fread(fid, [1 length_of_vector], 'double');
fclose(fid);
However, the "output" shows completely different values than what I saved using "fwrite". I tried to change precision from double to type float, int, etc., but it does not work. How can I get exactly the same vector what I saved?
I will appreciate any advise!

Accepted Answer

per isakson
per isakson on 9 Jul 2016
Edited: per isakson on 9 Jul 2016
This works for me on R2016a,Win7,64b. (Replacing real*8 by double doesn't change that.)
>> cssm( rand(1,1000) )
ans =
1
where
function ok = cssm( vec )
fid = fopen( 'cssm.bin', 'w' );
fwrite( fid, vec, 'real*8' );
fclose( fid );
fid = fopen( 'cssm.bin', 'r' );
out = fread( fid, size(vec), 'real*8' );
fclose( fid );
ok = all(vec==out);
end
  2 Comments
per isakson
per isakson on 9 Jul 2016
vector size &nbspis not a documented input argument of fwrite. See fwrite, Write data to binary file. IMO: fwrite ought to have issued at least a warning.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!