在MATLAB中读取具有各种格式规范的二进制文件

在MATLAB中读取具有各种格式规范的二进制文件,matlab,binary,formats,reader,Matlab,Binary,Formats,Reader,我目前正尝试在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

我目前正尝试在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多个不同领域都做不到。我想知道我是否有可能按照字段对应的字节块扫描文件,并能够自动确定格式类型、读取格式和基于格式存储格式;基本上,这是正确的、更优雅的方法


如果文件不包含有关内容的任何信息,则必须以类似的方式进行解析。您可以跳过fseek,仅当您想跳过文件中的区域时才需要它。如果你有上面列出的定义,我会尝试解析它并用它来读取文件。它是国家图像传输格式,因此它实际上定义得很好。文件感兴趣的部分实际上是图像像素集及其数据扩展名。它们的所有信息都包含在子标题中。子标题类似于我最初发布的内容,其中包含字节大小和字段类型信息。因此,在文件中会有很多移动,而且,对于各种格式规范,也没有设置模式。这就是为什么我想知道是否有一种更通用的算法方法来访问数据。我可以这样做,但它不能深入并访问所有的数据/图像片段。因此我找到了一种读取这些文件的方法,但我被困在了一些我不确定读取的字段上。第一个字段需要以下内容:无符号二进制整数;值的范围:0到2^n-1这是我所做的,我不确定它是否正确:fld1=strtrimcharfreadfi,2^nn-1,'uint8=>char';第二个字段更容易混淆。这里是它所需要的:两个IEEE 32位浮点数这是我正在考虑的:fld2=strtrimcharfreadfi,32,'float32*2=>char';请让我知道我的实现是否正确。谢谢