我定义了如下的结构体:
struct AHRSInfo
{
double GyroX;
double GyroY;
double GyroZ; double ACC_X;
double ACC_Y;
double ACC_Z; float Pitch;
float Roll;
float Heading;};
AHRSInfo IMUAngInfo;完了初始化如下:
IMUAngInfo.Roll = 2.46;
IMUAngInfo.Pitch = -20.342;
IMUAngInfo.Heading = 179;
IMUAngInfo.GyroX = 23.342;
IMUAngInfo.GyroY = 76;
IMUAngInfo.GyroZ = 34;
IMUAngInfo.ACC_X = -34;
IMUAngInfo.ACC_Y = 45;
IMUAngInfo.ACC_Z = 99.8;
在测试结构体长度时,显示是64,我测了,double是8个字节,float是自个字节,剩下的4个字节是怎么回事啊.
还有就是用如下的语句写入和读取二进制文件均不对.
写入: FILE *fp;
fp=fopen("SDFileName.bin","ab+");//不存在打开(创建文件)
        fwrite(&IMUAngInfo,sizeof(IMUAngInfo),1,fp);//
读取:
FILE *fp;
fp=fopen("SDFileName.bin","ab+");//不存在打开(创建文件)
FILE *ReadFile; char ReadOut[100];
fread(ReadOut,1,64,fp);
fwrite(ReadOut,1,64,ReadFile); fclose(fp);
fclose(ReadFile);谢谢!

解决方案 »

  1.   

    考虑内存对齐,加起来64struct AHRSInfo
    {
    double GyroX;    8
    double GyroY;    8
    double GyroZ;    8double ACC_X;    8
    double ACC_Y;    8
    double ACC_Z;    8float Pitch;     4
    float Roll;      4
    float Heading;   4 + 4(后面4个是补齐的)}; 
      

  2.   

    结构体默认的好像是8字节对齐,最后一个4字节的float被认为是8字节,你像这样修改结构体字节对齐
    #pragma pack(4)
    struct AHRSInfo{ 
    double GyroX; 
    double GyroY; 
    double GyroZ; 

    double ACC_X; 
    double ACC_Y; 
    double ACC_Z; 

    float Pitch; 
    float Roll; 
    float Heading; 

    }; 
    #pragma()
    结果就会是60了
      

  3.   

    #pragma pack(4) 
    #pragma() 加上这个就行,fwrite写结构体,fread读到一个结构体中。
    大家都说的不错了。
      

  4.   

    我要把数据转换成txt格式的文件,而不是二进制的.
      

  5.   

    要转换和读取也没有关系,也要读取之后才可以转化哪,不是说你用char*来读取就是字符串了。你不会真的这么以为吧?