【发布时间】:2015-02-20 13:31:54
【问题描述】:
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 个二维数据集,而没有按照我的意愿跳过前 400 个。有谁知道为什么?谢谢!
编辑:
如果我这样做
fseek(fid,5838952*400,'bof');
position = ftell(fid)
我明白了:
position =
0
【问题讨论】:
-
你检查
fseek的返回值了吗?来自文档:操作成功时返回 0。否则,它返回 -1。 -
fseek(fid,5838952*400,'bof') ans = -1。不知道为什么不成功。
-
我读过“whos”返回每个变量在工作区中占用的字节数,所以可能与实际的二进制文件不匹配! fseek(fid,10,'bof') position = ftell(fid) 返回 ans=0, position=10。
-
是的,看我的回答。您在文件中的数据是 int16(2 个字节),但在 MATLAB 内存中是 double(8 个字节)。