核心思想

  • 指定一段内存空间存储结构体数据,然后使用一个指针强制类型转化为结构体类型的,就可以使用这个指针操作结构体相关的成员函数和变量
  • 结构体内存只会为定义的变量进行分配内存空间,函数只进行调用,不占据空间

结构体

  void fill_md5(const std::string &md5_digest) {assert(md5_digest.length() == sizeof(md5));std::memcpy(md5, md5_digest.c_str(), sizeof(md5));}bool check_md5(const std::string &md5_digest) {assert(md5_digest.length() == sizeof(md5));return std::memcmp(md5, md5_digest.c_str(), sizeof(md5)) == 0;}void fill_current_version_info() {mgmt_max_key_storage_rsa = MGMT_MAX_KEY_STORAGE_RSA;mgmt_max_key_storage_ecc = MGMT_MAX_KEY_STORAGE_ECC;mgmt_max_key_storage_symmetric = MGMT_MAX_KEY_STORAGE_Symmetric;version = MGMT_BACKUP_VERSION;time = std::time(nullptr);}bool check_version_info() const {return mgmt_max_key_storage_rsa == MGMT_MAX_KEY_STORAGE_RSA &&mgmt_max_key_storage_ecc == MGMT_MAX_KEY_STORAGE_ECC &&mgmt_max_key_storage_symmetric == MGMT_MAX_KEY_STORAGE_Symmetric &&version == MGMT_BACKUP_VERSION;}
};

给结构体分配空间

  bool backup(const std::string &password,const std::string &backup_file) override {MGMT_TRY_BEGIN//调用KeyStorage的backup接口,得到原始备份文件的字节流auto backup_data = key_storage->backup();//计算md5std::string md5_data = common::get_md5_digest(backup_data);//在其尾部填充备份参数数据backup_data.resize(backup_data.length() + sizeof(util::BackupFileHeader));auto backup_params = reinterpret_cast<util::BackupFileHeader *>(&backup_data[backup_data.length() - sizeof(util::BackupFileHeader)]);backup_params->fill_md5(md5_data);backup_params->fill_current_version_info();//对处理后的数据进行加密,加密密钥由入参指定,将备份文件写入指定的文件夹util::aes_encrypt_to_file(backup_file, password, backup_data);MGMT_TRY_END}
  • 将结构体数据追加到先前的string类型的md5_string字符串的后面,需要指定一个指针找到结构体要存储的位置
  • 具体是这一行的代码 auto backup_params = reinterpret_cast<util::BackupFileHeader *>(&backup_data[backup_data.length() - sizeof(util::BackupFileHeader)]);

将结构体数据存储到一段字符串string中相关推荐

  1. Arduino EEPROM对结构体数据存储和读取

    Arduino EEPROM对结构体数据存储和读取 以Arduino UNO开发板为例. 注意:该示例不适用于在ESP8266上使用 EEPROM.put()或者 EEPROM.get()来对数据读写 ...

  2. ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据

    前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...

  3. 【C/C++13】天气APP:数据挖掘/HTTP协议/非结构化数据存储(filetoblob.cpp),数据管理/监控告警(hsmtable.cpp,tbspaceinfo.cpp)

    文章目录 1. 数据挖掘:/etc/rc.local,sudo su 2.HTTP协议:优先wget 3.非结构化数据存储:blob,pzhrain24file 4.数据管理子系统:数据字典表 5.监 ...

  4. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )

    文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...

  5. C语言经典例71-编写函数输出结构体数据

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 编写input()和output()函数输入,输出5个学生的数据记录. 2 分析 定义结构体,声明结构体数组,再编写函数传入结构体数组指针到 ...

  6. 结构化数据存储,如何设计才能满足需求?

    阿里妹导读:任何应用系统都离不开对数据的处理,数据也是驱动业务创新以及向智能化发展最核心的东西.数据处理的技术已经是核心竞争力.在一个完备的技术架构中,通常也会由应用系统以及数据系统构成.应用系统负责 ...

  7. 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解

    前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库.Tablestore在阿里云官网上有各种文档介绍,也发布了很多场景案例文章,这些文 ...

  8. Qt窗口之间传值和结构体数据

    简单明了,看效果+看代码 主窗口向子窗口进行传值和传结构体数据 子窗口向主窗口进行传值和传结构体数据 子窗口界面 主窗口界面 dialog.h #ifndef DIALOG_H #define DIA ...

  9. 用结构体数组存储学生信息,输入学生学号,查询相应的成绩

    用结构体数组存储学生信息,输入学生学号,查询相应的成绩 主要是熟练一下结构体的运用,思路:先存储学生信息,然后做相应的查询,在存储过程中,设置以#为结束标志,在查找过程中,同样以#为结束标志,这里用到 ...

最新文章

  1. springboot多模块项目,无法找到另一个模块的实体类
  2. 四川c语言二级成绩查询,四川省计算机等级考试二级C语言考试分析(hcy__ ).ppt
  3. PermGen space处理方法1
  4. 【转】使用命令行方式创建和启动android模拟器
  5. FFMpeg分析详细分析
  6. React之props基本使用
  7. 使用5502自带的UART口发送数据乱码的问题
  8. 计算机word求差函数,表格里怎么自动求差/怎样在word2010表格中求差
  9. 位置不可用无法访问介质受写入保护怎么修复?
  10. seo入门最重要的是什么?
  11. Uboot SPL的Boot模式选择(从MMC切换到SPI启动)
  12. ROS-Melodic 编译Moveit全过程记录和错误解决方案
  13. Ubuntu 搜索不到WIFI或连接不上的解决方法
  14. 太原理工大学系统分析与设计实验报告实验室设备_警钟长鸣!盘点国内高校实验室事故...
  15. Doris的基本概述
  16. 状态机的描述方法案例分析(一段式、二段式、三段式)
  17. python字典取值_python字典,python字典取值
  18. 使用python管理百度云存储
  19. 应、往届生考研?注意事项大不同!
  20. Web|Http协议-请求\响应\数据类型\协议类型总结

热门文章

  1. java注解中可使用对象_Java注解(二):实战 - 直接使用对象列表生成报表...
  2. 【转】文本文件和二进制文件区别及java中字节流和字符流归纳
  3. 【转】C#命名空间与java包的区别分析
  4. 一步步编写操作系统 58 门、调用门与RPL序 3
  5. php session 机制,Cookie、Session机制详解及PHP中Session处理
  6. 查看mysql数据库的死锁日志_【MySQL】mysql死锁以及死锁日志分析
  7. 后台接收datetime_input上传date日期时间数据到后台报400怎么办?
  8. Python3 基础学习笔记 C03【操作列表】
  9. 【HDU - 3870】Catch the Theves(平面图转对偶图最短路,网络流最小割)
  10. 【POJ - 2942】Knights of the Round Table(点双连通分量,二分图判断奇环奇圈)