如何在 MATLAB 中逐字节读取二进制格式
how to read binary format byte by byte in MATLAB
我一直在为这个错误而苦苦挣扎。当使用 MATLAB 读取包含三列数字的二进制文件时 float
格式。
我正在使用这条线一次读取一个数字。
pt(j) = fread(fid,1,'float','a');
我发现有时(很少)MATLAB
不是为浮点数读取四个字节,而是使用 5 个字节。它错过了阅读的其余部分。我不确定文件是否损坏或 MATLAB
那里有错误。当我将文件打印为 txt 并以 txt 格式阅读时,一切正常。
我就是这样做的:
cur = ftell(fid);
if (cur - prev)~= 4
pt(j) = 0; % I m throwing this reading away for the sake of saving the rest of the data. This is not ideal
cur = prev +4;
fseek(fid, cur,'bof');
end
prev = cur;
我尝试了不同格式的不同组合 float32
float64
等等...没有任何效果 MATLAB
在这个特定位置总是读取 5 个字节而不是 4 个字节。
编辑:
根据克里斯的回答解决它。我正在使用此命令打开文件。
fid = fopen(fname,'rt');
我换成了这个
fid = fopen(fname,'r');
有时,很少会跳过一个字节。在我看来,您好像在 Windows,并以文本模式打开文件。参见 the permissions
parameter to the fopen
function。
在 Windows 上以文本模式打开文件时,序列 \r\n
(13,10) 被替换为 \n
(10)。这发生在 fread
到达之前。
所以,打开文件时,不要这样做:
fid = fopen('name', 'rt');
这里的t
表示"text"。相反,做:
fid = fopen('name', 'r');
为了明确这一点,您可以在权限中添加 b
。这没有记录,但应该表示 "binary",并使调用类似于您在 C 或 POSIX fopen()
:
中所做的调用
fid = fopen('name', 'rb');
我一直在为这个错误而苦苦挣扎。当使用 MATLAB 读取包含三列数字的二进制文件时 float
格式。
我正在使用这条线一次读取一个数字。
pt(j) = fread(fid,1,'float','a');
我发现有时(很少)MATLAB
不是为浮点数读取四个字节,而是使用 5 个字节。它错过了阅读的其余部分。我不确定文件是否损坏或 MATLAB
那里有错误。当我将文件打印为 txt 并以 txt 格式阅读时,一切正常。
我就是这样做的:
cur = ftell(fid);
if (cur - prev)~= 4
pt(j) = 0; % I m throwing this reading away for the sake of saving the rest of the data. This is not ideal
cur = prev +4;
fseek(fid, cur,'bof');
end
prev = cur;
我尝试了不同格式的不同组合 float32
float64
等等...没有任何效果 MATLAB
在这个特定位置总是读取 5 个字节而不是 4 个字节。
编辑: 根据克里斯的回答解决它。我正在使用此命令打开文件。
fid = fopen(fname,'rt');
我换成了这个
fid = fopen(fname,'r');
有时,很少会跳过一个字节。在我看来,您好像在 Windows,并以文本模式打开文件。参见 the permissions
parameter to the fopen
function。
在 Windows 上以文本模式打开文件时,序列 \r\n
(13,10) 被替换为 \n
(10)。这发生在 fread
到达之前。
所以,打开文件时,不要这样做:
fid = fopen('name', 'rt');
这里的t
表示"text"。相反,做:
fid = fopen('name', 'r');
为了明确这一点,您可以在权限中添加 b
。这没有记录,但应该表示 "binary",并使调用类似于您在 C 或 POSIX fopen()
:
fid = fopen('name', 'rb');