我定义了如下的结构体:
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);谢谢!
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);谢谢!
{
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个是补齐的)};
#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了
#pragma() 加上这个就行,fwrite写结构体,fread读到一个结构体中。
大家都说的不错了。