How to read 8-byte floating point numbers from binary?use fread
28 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
aijiangzhao aixuwu
el 28 de Oct. de 2021
fseek(fid,56,'bof');
x = fread(fid,1,'float64','b')
3 comentarios
Walter Roberson
el 29 de Oct. de 2021
When you fopen you should specify the byte order as the third parameter to fopen, unless you are reading from something with mixed orders.
If you are reading from something with mixed orders but know the order for one particular binary fread then specify the byte order as a parameter to fread.
If you are reading a sequence of bytes at one time and regrouping them (such as if you were reading a structure with mixed datatype) then if necessary use swapbytes after any necessary typecast()
Respuesta aceptada
Jan
el 30 de Oct. de 2021
Editada: Jan
el 12 de Nov. de 2021
With 'ieee-le' format the bytes are read in the order [8,7,6,5,4,3,2,1], with 'ieee-be' as [1,2,3,4,5,6,7,8]. There is no format to store doubles with the byte order [4,3,2,1,8,7,6,5]. Yo you have to convert the order manually by reading the bytes, mix them as wanted and use typecast for the conversion.
[EDITED] As code:
bytes = fread(fid, 8, '*uint8');
bytes = bytes([4,3,2,1,8,7,6,5]);
value = typecast(bytes, 'double')
8 comentarios
Jan
el 12 de Nov. de 2021
As I have suggested already, except for the changed byte order:
% fseek(fid, 56, 'bof');
% bytes = fread(fid, 8, '*uint8');
% Manually:
bytes = uint8(sscanf('C5 B9 FB 60 C1 4B FD CA', '%x')).';
value = typecast(fliplr(bytes), 'double') % As your fread('float64')
% [197, 185, 251, 96, 193, 75, 253, 202]
bytes = bytes([4,3,2,1,8,7,6,5]);
value = typecast(bytes, 'double')
Now the byte order and the order of 4-Byte-blocks is swapped.
Más respuestas (0)
Ver también
Categorías
Más información sobre Language Support en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!