Read binary file 3 bytes at a time
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Domenico Bellantoni
el 10 de Jun. de 2015
Comentada: James Tursa
el 11 de Jun. de 2015
Hi, I am new and I discovered that the fread by default reads a binary file 1 byte at a time, how can I read the file 3 bytes at a time. Thanks
0 comentarios
Respuesta aceptada
James Tursa
el 10 de Jun. de 2015
Editada: James Tursa
el 10 de Jun. de 2015
Try something like this. It reads in the entire file as uint8, groups them in 3 bytes, inserts an extra 0 byte in front of the group of 3, and then reinterprets the bytes as 4 byte unsigned integers. If you don't get the result you want, we may have endian issues to deal with and may need to swap bytes.
x = fread(fid,inf,'*uint8'); % read as uint8
x = reshape(x,3,[]); % groups of 3 in columns
[m,n] = size(x); % get size
x = [zeros(1,n,'uint8'); x]; % insert row of 0's at top to get 4 bytes per number
x = typecast(x(:),'uint32'); % reinterpret bytes as 4-byte unsigned integers
4 comentarios
James Tursa
el 10 de Jun. de 2015
Sorry, you grabbed it before my last edit using x(:) in the last line.
Más respuestas (2)
Guillaume
el 10 de Jun. de 2015
A much simpler solution would have been to read the file with a precision of 'ubit24' (or 'bit24' if the integer are signed), which is basically a 3 byte integer:
x = fread(fid, 'ubit24'); %that's it. all done
1 comentario
James Tursa
el 11 de Jun. de 2015
Good one ... I learned something today about formats available for fread.
Walter Roberson
el 10 de Jun. de 2015
fread(fid, 3)
4 comentarios
James Tursa
el 10 de Jun. de 2015
Editada: James Tursa
el 10 de Jun. de 2015
Do you mean you have a file of many bytes, and each group of 3 bytes in the file should be read in as an individual number? If so, what type of number? An integer of some sort?
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!