Help for setting the formatSpec when reading hexadecimal

4 views (last 30 days)
Hello, this is Matthew.
I'm trying to read a file that contains hexadecimal. This is the pattern. Or check the attached file, please.
00b7 17ff 5b3f 1700 c84b 1eff b398 1d00
a577 00ff 15b3 00ff 00b7 17ff 5b3f 1700
c84b 1eff b398 1d00 a577 00ff 15b3 00ff
00b7 17ff 5b3f 1700 6929 1eff b398 1dff
a577 00ff b690 00ff 00b7 1700 5b3f 1700
6929 1eff b398 1dff a577 00ff b690 00ff
So I wrote that
formatSpec = '%04x %04x %04x %04x %04x %04x %04x %04x\n';
fid = fopen(filename, 'r');
hex = fscanf(fid, formatSpec);
sizeHex = length(hex); % the length shows 0
How should I change the format spec to read the hexadecimal correctly?
-Regards, Matthew

Accepted Answer

Walter Roberson
Walter Roberson on 19 Mar 2018
That file does not contain hexadecimal. It is a binary file. You can use
data = fread(fid, '*uint16', [1 inf]);
If you want to see the hex equivalent you can
disp(dec2hex(data))
Watch out for byte order questions. The above code will treat the byte stream as being the in-memory byte order, which is "little endian" -- the first byte of the file would be the low byte (least significant) of the uint16. You can add 'ieee-be' to the fopen() to have it treat the first byte of the file as the high byte (most significant) of the uint16.
  3 Comments
Matthew Kyeo
Matthew Kyeo on 21 Mar 2018
You don't have to apologize! :D
You saved my life. Thanks~
-Regards, Matthew

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!