C++结构体序列化读写二进制文件类

C++结构体序列化读写⼆进制⽂件类
C与C++的⼆进制⽂件读写
参考下⾯的⽂章,C/C++读写⽂本⽂件、⼆进制⽂件
C的⽂件操作
#include <stdio.h>
ephDE_recOne rec;                          // 结构定义
FILE * f = fopen("file_name","rb");        // ⽂件打开
if(f == NULL)  return;                      // 打开失败
fread(&rec, sizeof(ephDE_recOne),1, f);    // 读⼆进制⽂件数据
fclose(f);
国电物资商务网
C++的⽂件操作
#include <iostream>
#include <fstream>
ephDE_recOne rec;                                    // 结构定义
ifstream infile("file_name",ios::in | ios::binary);  // ⽂件打开
if(!infile)  return;                                  // 打开失败
infile.close();
C++的⼆进制⽂件读取结构体问题
在编写⼀个DE405星历⽂件的读取函数中,结构体读取后数值与实际的不⼀致。
在下⾯这段代码中,读取struct后label与constName内容正确,后⾯结构数值不正确。
struct ephDE_recOne{
char    label[3][84];
char    constName[400][6];
double  timeData[3];
int    numConst;
检索式double  AU;
double  EMRAT;
int    coeffPtr[12][3];
int    DENUM;
int    libratPtr[3];
int    RSize;
};
const int deLen = 1018;
void read(){
using namespace std;
ephDE_recOne rec;
ifstream infile(DE_file_path.c_str(), ios::in | ios::binary);
if(!infile)
throw exception();
如何推动社会主义文化大发展大繁荣infile.close();
}
通过⽐较读取结果与实际数值发现,读取到的AU数值为实际的EMRAT数值。因此猜测是数据结构体的发⽣了错位情况。
代码编译的字节对齐问题 #pragma pack(push,1)直流固态继电器
由于不是专业出⾝,这个内存字节的原因不能说清楚。原来在⽤fortran编写带有通信接⼝的程序时曾遇到过类似问题,虽然代码不做改动,但是否指定单字节内存对齐将影响数据处理的结果。
这⾥,我使⽤的是Qt的mingw32编译套件编译的程序,将上述代码的结构定义修改为
#pragma pack(push, 1)
struct ephDE_recOne{
char    label[3][84];党的性质是什么
char    constName[400][6];
double  timeData[3];
int    numConst;
double  AU;
double  EMRAT;
int    coeffPtr[12][3];
int    DENUM;
int    libratPtr[3];
int    RSize;
};
#pragma pack(pop)
⼆进制⽂件的数据结构能够正确读写。旋风铣

本文发布于:2024-09-22 09:37:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/374449.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结构   读取   数值   代码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议