MATLAB fseek 二进制数据读入问题

MATLAB fseek binary data read-in issue

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

我正在尝试从二进制文件中读取二维数据的子集(不是从头开始)。我知道 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

您正在查找文件末尾。 运行

ferror(fid)

紧接着

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

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

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