dyfxjtu 2016-12-16 07:54 采纳率: 0%
浏览 1287
已结题

如何c语言打开二进制带状矩阵的.dat文件

我需要从.dat文件中读取矩阵,然后进行相关运算。现在小白一个,完全不知道怎么做。现将.dat的描述如下。
1.数据文件的文件名后缀为.dat,形式为:文件名.dat;
2.数据文件中的数据均为二进制记录结构,因此必须使用二进制方式进行读取;
3.数据文件的结构,分为以下四个部分:
(1)文件标示部分,该部分用于存放数据文件的描述信息
结构如下(用C语言格式进行描述):

  typedef struct FileInfo {
         long int id;           // 数据文件标示
        long int ver;       // 数据文件版本号
        long int id1;       // 备用标志

} FILEINFO;

其中:
①id:为该数据文件的标识,值为0xF1E1D1A0
即为:十六进制的F1E1D1A0

②ver:为数据文件的版本号,值为16进制数据,

版本号 说明
0x101 系数矩阵为非压缩格式稀疏矩阵
0x102 系数矩阵为非压缩格式带状矩阵
0x201 系数矩阵为压缩格式稀疏矩阵
0x202 系数矩阵为压缩格式带状矩阵

③id1:为备用标志字段,暂时未用;

(2)矩阵描述部分:此部分中包括矩阵的阶数和上下带宽,如果是稀疏矩阵,则上下带宽值为0。
结构如下:

typedef struct HeadInfo {
long int n; // 方程组的阶数
long int q; // 带状矩阵上带宽
long int p; // 带状矩阵下带宽
} HEADINFO;

(3) 系数矩阵数据部分:该部分存放方程组系数矩阵中的所有元素
①如存贮格式为非压缩格式,则按行方式顺序存贮系数矩阵中的每一个
元素,元素总个数为n*n,每个元素的类型为float型;
②如果存贮格式是压缩方式,则同样是按行方式进行存贮,每行中只
放上下带宽内的非零元素,即每行中存贮的元素都为p+q+1个;

(4)右端系数部分:该部分存放方程组中的右端系数
按顺序存贮右端系数的每个元素,个数为n个,每个系数的类型为float型

3.数据文件说明:
(1)Dat61.dat 为非压缩带状方程组,阶数为15阶,该方程组供调试程序使用,该方程组的根都为1;
(2)Dat62.dat 为压缩带状方程组,阶数为20阶,该方程组供调试程序使用,该方程组的根都为1;
(2)Dat63.dat 为非压缩带状方程组,阶数在2000阶左右;
(3)Dat64.dat 为压缩带状方程组,阶数在40000阶左右;

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-12-16 15:17
    关注

    你应该找定义这个dat格式的人去要读写它的代码,这是他的工作职责。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?