免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3755 | 回复: 3
打印 上一主题 下一主题

[C] 二进制文件读取, 用vc++2005 和 gcc,表现且不一样,,求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-22 23:47 |只看该作者 |倒序浏览
本人用函数fread读取如下结构的.mca文件,在vc++2005 中能正确读取,而在gcc中却不能!!
各位兄台帮帮忙!
  1. #include <iostream>
  2. #include "spa.h"
  3. #include "pcaheader.h"

  4. using namespace std;

  5. int main()
  6. {
  7.     FILE *ff;
  8.     PCAHEADER_C kk;

  9.     ff=fopen("kk.dat","rb");
  10.     if(ff)
  11.         if(fread(&kk,sizeof(char),sizeof(PCAHEADER_C),ff) != sizeof(PCAHEADER_C))
  12.     {
  13.         printf("fail!\n");
  14.         return -1;
  15.     }

  16.     printf("c0=%f\t c1=%f\t,c2=%f\n chn=%d\n",kk.c0,kk.c1,kk.c2,kk.chn_number);
  17.     fclose(ff);

  18.     return 0;
  19. }
复制代码
结构如下:(附上.mca文件)
  1. typedef struct{         /*size=128                               offset*/
  2.    short readout_type;    /*1 -  setup,    2 - spectrum data,
  3.                           3 -  ROI list, 4 - learn/execute task       0*/
  4.    short mac_number;      /*MAC #1 - 4                                  2*/
  5.    short region;          /*0 - full, 1 - first half, .......
  6.                           30- sixteenth sixteenth,                    4*/
  7.    unsigned long tag_n; /*0 - 99999999                                6*/
  8.    char id[26];         /*identification of spectrum                 10*/
  9.    short acq_mode;        /*0x0100 -- PHA-,     0x0180 -- PHA+
  10.                           0x0200 -- PHA-&MXR, 0x0280 -- PHA+&MXR
  11.                           0x0300 -- MCSR-     0x0380 -- MCSR+        36*/
  12.    long     time;        /*time in second since 00:00:00 GMT 1980     38*/
  13.    unsigned short millitm;    /*milliseconds                               42*/
  14.    unsigned short timezone;   /*difference in minuts westword between
  15.                           GMT and local time                         44*/
  16.    unsigned short dstflag;    /*day light savings time flag                46*/
  17.    long livetime;       /*elapsed live time in hundredths of sec     48*/
  18.    long realtime;       /*elapsed true time in hundredths of sec     52*/
  19.    long sweeps;         /*elapsed MCSR sweeps                        56*/
  20.    double preset;       /*elapsed computational preset               60*/
  21.    float c2;            /*energy cal. equation 2nd order term        68*/
  22.    float c1;            /*energy cal. equation ist order term        72*/
  23.    float c0;            /*energy cal. equation constant term         76*/
  24.    char  unit[5];       /*energy cal. units ASC-II                   80*/
  25.    char  unittype;      /*energy cal. units
  26.                           0 -- keV, 1 -- MeV, 2 -- eV,
  27.                           3 -- other (user defined)                  85*/
  28.    char  format;        /*energy reporting format
  29.                           0 -- 6.1, 1 -- 6.2, 2 -- 6.3,
  30.                           3 -- 6.4, 4 -- 6.5                         86*/
  31.    char  order;         /*energy equation order
  32.                           1 -- first order, 2 -- second order        87*/
  33.    short  spm_num;        /*spectrum number                            88*/
  34.         short  naa_flag;       /*must be 27575, if processed by NAA V2.xx   90*/
  35.         short  filler[17];     /*reserved                                   92*/
  36.    short  chn_number;     /*MCA channel number                        126*/
  37.    }PCAHEADER_C;
复制代码

file.zip

18.31 KB, 下载次数: 19

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
2 [报告]
发表于 2011-08-23 09:14 |只看该作者
字节对齐问题?

论坛徽章:
0
3 [报告]
发表于 2011-08-23 12:03 |只看该作者
回复 2# noword2k


    是这个原因,,  由于结构太长了,,  有没有办法一次就把这个结构从磁盘拷贝到内存对应的结构里..而不用一个一个的fread 出来!

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
4 [报告]
发表于 2011-08-23 14:41 |只看该作者
用 stdint.h 里的类型,不知道有没有帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP