MATLAB fseek二进制数据读入问题

时间:2015-02-20 13:31:55

标签: matlab binary fseek

MATLAB 7.13.0.564(R2011b),UBUNTU 12.04(精确)64位

我正在尝试从二进制文件中读取2D数据的子集(不是从头开始)。我知道1个2D数据集是5838952字节:

>>whos

DATA               5747x127                 5838952  double

我尝试使用fseek跳过前400个2D数据集:

fseek(fid,5838952*400,'bof');

然后阅读接下来的100个数据集:

for i = 1:100
    DATA(i,:,:) = fread(fid,[5747 127],'int16');
end

但是代码继续在前100个2D数据集中读取而不跳过我想要的前400个。谁知道为什么?谢谢!

编辑:

如果我这样做

fseek(fid,5838952*400,'bof');
position = ftell(fid) 

我明白了:

position =

     0

1 个答案:

答案 0 :(得分:2)

您正在寻找文件的末尾。运行

ferror(fid)

后立即

fseek(fid,5838952*400,'bof');

数据在文件中是int16,但是你在MATLAB中加载为double,因此大小是字节数的四倍。你应该寻求:

status = fseek(fid, 5747 * 127* 400 * 2, 'bof')