如何读取未知格式二进制文件

我有一个.cli的文件,但是我知道他的结构,我用下面程序,读文件:

int main() 
{
    ifstream in;
    string filename;
    getline(cin,filename,'\n');
    in.open(filename);
    if (!in)
    {
        cerr << "打开文件出错!" << endl;
    }
    else
    {
        char ch;// [8] = { 'a','b','b','b','b','b','b','b' };
        int f = 0;
        while (!in.eof())
        {
            in.read(&ch, 1);
            f++;
            cout << ch;
        }
    }
    in.close();
    getchar();
    return 0;
}

运行结果如下图:

$$HEADERSTART
$$BINARY
$$UNITS/00000000.005000
$$VERSION/200
$$LABEL/1,part1
$$DATE/141217
$$DIMENSION/00000046.417800,00000041.423800,00000000.000000,00000056.417800,00000051.423800,00000009.975000
$$LAYERS/000400
$$HEADEREND€      % ,_ ,(,(,#(,$(,&(,&(,'(,'(,((,)(,)(,)(,*(,*(,*(,+(,+(,+(,+(,+(,-(K$-(K$-(K$-(K$-(K$-(H$-(E$-(D$-(D$-(D$+(D$v D$] ?

不知道有没有高手,可以向我指点一二,位置结构的二进制文件如何读取?

参考一下吧
http://c.biancheng.net/view/302.html

你自己都说了,未知格式,所以你第一步就是应该逆向分析它的格式,你需要读取的数据是什么。看上去你读取到一些内容,有文本,有不可读的二进制数据。
这个文件是不是什么程序生成的,如果是,你在那个程序里对这个文件尝试做一个修改,然后比较修改前后的区别,就可以知道哪里存储了这个修改,再根据你已知的值分析它以何种形式存储在文件里的。
(这个过程有点类似分析游戏修改的内存,只是一个是内存,一个是文件)
分析好了,再写程序就简单了。