open a hex file

64 次查看(过去 30 天)
Ronaldo
Ronaldo 2013-10-16
评论: Ronaldo 2013-10-17
I use the following code to open a hex file (please look at the attachment).
fid = fopen('FileName');
A = fread(fid);
My problem is instead of getting A as a cell containg n*1 (n is the number of rows in the hex file) I get one row of numbers. I would appreciate it if you help me get a result like below:
00 00 00 00 49 40 40 0D
03 00 30 43 C6 02 00 00
A3 6B 74 23 90 47 E4 40
and so on
  1 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-10-16
Can you post the result you've got? maybe with simple use of reshape function you can get the expected result

请先登录,再进行评论。

采纳的回答

Jan
Jan 2013-10-16
编辑:Jan 2013-10-16
There is not format you can call "hex file". You can interpret a file as stream of bytes and display them by hex numbers. But from this point of view, any file is a hex file.
Please try this:
fid = fopen('FileName');
A = fread(fid, Inf, 'uint8');
fclose(fid);
Fmt = repmat('%02X ', 1, 16); % Create format string
Fmt(end) = '*'; % Trailing star
S = sprintf(Fmt, A); % One long string
C = regexp(S, '*', 'split'); % Split at stars
Perhaps a string with line breaks is sufficient:
Fmt = repmat('%02X ', 1, 16); % Create format string
Fmt(end:end+1) = '\n';
S = sprintf(Fmt, A);
  3 个评论
Jan
Jan 2013-10-16
@Ronaldo: Please specify "large". Some people in the forum use this for 1000 elements, some for 1e15 elements.
When importing the file exhausts too much memory, install more memory, use a 64 bit version of Matlab and OS, free arrays, which are not used anymore. You can import the data by fread(fid, Inf, '*uint8') also, which occupies just an 8.th of the memory. But for SPRINTF a modern Matlab version is required then, because older ones did not accept UINT8 as input.
Ronaldo
Ronaldo 2013-10-17
The file that I want to open is 5 GB. I am using a 64 bit version of MATLAB and OS. Available physical memory of my computer is 31.2 GB. I was wondering whether there is anyway that I can prevent OUT of MEMORY problem if I want to open the 5 GB file.

请先登录,再进行评论。

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-10-16
编辑:Azzi Abdelmalek 2013-10-16
fid = fopen('file.txt');
A = textscan(fid,'%s %s %s %s %s %s %s %s')
fclose(fid)
A=[A{:}]
arrayfun(@(x) strjoin(A(1,:)),(1:3)','un',0)
  8 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-10-16
编辑:Azzi Abdelmalek 2013-10-16
Decimal numbers? please edit your question and make it as clear as possible
Jan
Jan 2013-10-16
@Ronaldo: A memory leak? I assume, you mean something completely different.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Large Files and Big Data 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by