Matlab fscanf string читать странное поведение - PullRequest
2 голосов
/ 06 октября 2019

Я пытаюсь прочитать файл в Matlab с помощью fscanf. Файл представляет собой дамп некоторой области памяти в микроконтроллере. Я экспортирую его из IDE, и кодировка «ISO-8859-1».

Вот одна строка из файла, когда я открываю его в matlab:

25 08 00 00 7E 05 00 00 08 08 00 00 85 05 00 00 0D 06 00 00 76 06 00 00 04 0C 00 00 FB 07 00 00
3A 06 00 00 0C 06 00 00 01 06 00 00 0C 06 00 00 C3 05 00 00 EF 05 00 00 05 06 00 00 FF 05 00 00
EF 05 00 00 FB 05 00 00 89 08 00 00 74 06 00 00 0D 06 00 00 FC 05 00 00 10 06 00 00 C3 05 00 00
C5 05 00 00 F2 05 00 00 81 05 00 00 1C 06 00 00 85 05 00 00 F0 05 00 00 C2 05 00 00 5F 05 00 00

(здесь полный файл)

И это правильно: те же цифры я вижу в IDE. Что я делаю:

fileID = fopen('testdataadc.txt','r','n','ISO-8859-1');
% Read all characters excluding white spaces.
vecDump = fscanf(fileID, '%s' ,[25 Inf]);
fclose(fileID);

Где 'n' для нативных порядковых номеров: Ваш системный порядок байтов (по умолчанию). А теперь первый столбец в vecDump (это переменная типа 25x64):

25060000F5080000F8070000F0050000E5050000FC060000EF06000000070000

Формат, который я ожидал, но значения неправильные. Например:

         25 08 00 00 becomes 25 06 00 00
         7E 05 00 00 becomes F5 08 00 00

Что я здесь не так делаю?

1 Ответ

1 голос
/ 06 октября 2019

Выход fscanf представляет собой матрицу 25x64 символов. Данные из файла заполняют эту матрицу по столбцам. Если вы посмотрите вдоль первого столбца, вы увидите: «250800007E05» и т. Д. Поскольку файл содержит 64 непробельных символа в каждой строке, вы должны прочитать файл в матрицу 64xN и затем транспонировать ее:

vecDump = fscanf(fileID, '%s', [64,Inf]).'

Теперь vecDump будет выглядеть как ваш файл, но без пробелов.

...