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')
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')