fwrite to fread changes data completely!
8 views (last 30 days)
Show older comments
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!
2 Comments
Accepted Answer
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
on 9 Jul 2016
Edited: per isakson
on 9 Jul 2016
vector size  is not a documented input argument of fwrite. See fwrite, Write data to binary file. IMO: fwrite ought to have issued at least a warning.
More Answers (0)
See Also
Categories
Find more on Text Files in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!