Matlab fscanf 字符串读取奇怪的行为

Matlab fscanf string read strange behavior

我正在尝试使用 fscanf 在 matlab 中读取文件。该文件是微控制器中某个内存区域的转储。我从 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

(here 完整文件)

这是正确的:我在 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

我做错了什么?

fscanf 的输出是一个 25x64 字符矩阵。来自文件的数据按列填充此矩阵。如果你沿着第一列看,你会看到:“250800007E05”等。因为文件每行有 64 个非 space 字符,你应该将文件读入一个 64xN 矩阵,然后转置它:

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

现在 vecDump 看起来像您的文件,但没有 space。