Read binary file 3 bytes at a time
7 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
James Tursa
2015 年 6 月 10 日
編集済み: James Tursa
2015 年 6 月 10 日
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 件のコメント
その他の回答 (2 件)
Guillaume
2015 年 6 月 10 日
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 件のコメント
James Tursa
2015 年 6 月 11 日
Good one ... I learned something today about formats available for fread.
Walter Roberson
2015 年 6 月 10 日
fread(fid, 3)
4 件のコメント
James Tursa
2015 年 6 月 10 日
編集済み: James Tursa
2015 年 6 月 10 日
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?
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!