我目前正在尝试在MATLAB中使用各种格式规范类型实现二进制阅读器,如下所示:
%FIELD %Bytes % VALUE RANGE
---------------------------
field1 %4 Basic Character Set(BCS)-A
field2 %5 BCS-A
field3 %2 BCS-N (positive integer 01 to 99)
field4 %4 BSC-A
field5 %10 BCS-A
field6 %14 BCS-N (integer CCYYMMDDhhmmss)
field7 %80 ECS-A
这只是一个包含大量数据(最大1GB)的大得多的文件的文件头的一小部分。重点是,有几种不同类型的格式规范类型。到目前为止,我所做的是以下内容来阅读上述标题子集:
fid = fopen([fnm '.ntf'],'r');
while ftell(fid)~=119
fseek(fid,0,'bof')
field1 = fread(fid,4,'int8');
fseek(fid,4,'bof')
field2 = fread(fid,5,'char');
fseek(fid,9,'bof')
field3 = fread(fid,2,'int8');
fseek(fid,11,'bof')
field4 = fread(fid,4,'char');
fseek(fid,15,'bof')
field5 = fread(fid,10,'char');
fseek(fid,25,'bof')
field6 = fread(fid,14,'int8');
fseek(fid,39,'bof')
field7 = fread(fid,80,'char');
end
fclose(fid);
我意识到这是非常基本的,也是一种非常野蛮的方式来完成我想要做的事情;更不用说我不能为100个不同领域做到这一点。我想知道我是否有可能以对应于字段的字节块扫描文件,并能够自动确定格式类型,读取格式并根据格式存储它;基本上,这是正确的,更优雅的方式。