C++如何在文件I/O中使用二进制数据结构

使用二进制模式可高效读写结构化数据。定义POD结构体Student,包含id、name和gpa成员;通过std::ofstream以binary模式打开文件,用write()将结构体内存布局写入文件;再通过std::ifstream使用read()恢复数据,确保读写结构一致即可准确还原。

c++如何在文件i/o中使用二进制数据结构

在C++中处理文件I/O时,若要高效读写结构化数据,使用二进制模式配合数据结构是一种常见做法。相比文本模式,二进制模式能直接保存和恢复内存中的数据布局,速度快且不丢失精度,特别适合存储自定义结构体或类对象。

定义用于二进制I/O的数据结构

为了在文件中读写二进制结构,首先需要定义一个简单的POD(Plain Old Data)结构体。这类结构体不含虚函数、动态成员或复杂构造函数,确保内存布局是连续且可预测的。

struct Student {
    int id;
    char name[50];
    float gpa;
};

这个结构体可以完整写入文件或从文件中读取,只要保证写入和读取时结构体定义一致。

将结构体写入二进制文件

使用 std::ofstream 以二进制模式打开文件,并通过 write() 方法写入结构体的原始字节。

立即学习“C++免费学习笔记(深入)”;

Student s{1, “Alice”, 3.8f};
std::ofstream out(“data.bin”, std::ios::binary);
if (out) {
    out.write(reinterpret_cast(&s), sizeof(s));
    out.close();
}

注意:使用 reinterpret_cast 将结构体指针转为 char 指针,以便 write() 能正确处理原始字节。sizeof(s) 提供结构体的总字节数。

从二进制文件读取结构体

使用 std::ifstream 以二进制模式读取文件,通过 read() 方法还原结构体内容。

Student s = {};
std::ifstream in(“data.bin”, std::ios::binary);
if (in) {
    in.read(reinterpret_cast(&s), sizeof(s));
    if (in) {
        // 读取成功
        std::cout
    }
    in.close();
}

读取后建议检查流状态(如 in.good() 或 in.fail()),确保没有发生截断或读取错误。

注意事项与限制

二进制I/O虽然高效,但有几点需要注意:

结构体不能包含指针或动态分配成员(如 std::string、std::vector),因为这些只存储地址,无法正确序列化。 不同平台或编译器可能导致结构体对齐方式不同,影响二进制兼容性。可使用 #pragma pack 控制对齐。 浮点数格式在不同系统间应保持一致(通常现代系统都使用IEEE 754)。 建议在读写前后验证数据完整性,比如加入魔数或版本号。

基本上就这些。只要结构体是简单的数据聚合,二进制文件I/O就能快速实现数据持久化。不复杂但容易忽略细节。

以上就是C++如何在文件I/O中使用二进制数据结构的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1474466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C++状态模式与事件触发对象行为变化
上一篇 2025年12月18日 21:36:34
C++多态特性使用与虚函数解析
下一篇 2025年12月18日 21:36:52

相关推荐

  • Linux最小权限原则实践指南

    最小权限原则要求用户和进程仅拥有必要权限。创建独立账户、限制sudo权限、设置专用服务账户并禁用登录;合理配置文件权限如600/750,禁用全局可写;服务以非root用户运行,通过systemd指定User/Group;利用sudo精细化授权,记录操作日志;需定期审计与监控,结合AIDE、audit…

    2026年9月8日
    000
  • 努比亚红魔9 Pro+对决ROG游戏手机8 Pro:无孔全面屏游戏手机的触控与散热,谁为电竞而生?

    红魔9 Pro+以2000Hz触控采样率和10182mm²超大VC散热占优,ROG游戏手机8 Pro则凭借720Hz触控与矩阵式液冷6.0及外接风扇设计见长,两者均搭载骁龙8 Gen 3、5500mAh电池与顶级存储组合,选择取决于用户更看重极致响应还是可扩展散热生态。 讨论红魔9 Pro+和ROG…

    2026年9月8日
    000
  • 《光环:战役进化》2026年推出 登陆PS5/Xbox/PC平台

    在2025年《光环》世界锦标赛上,光环工作室正式揭晓了全新作品——《光环:战役进化》(halo: campaign evolved)。该游戏预计于2026年登陆xbox series x|s、pc平台(包括steam)、playstation 5,并支持xbox云游戏与xbox play anywh…

    2026年9月8日
    000
  • 如何在mysql中使用EXPLAIN分析SQL

    EXPLAIN用于分析SQL执行计划,通过在查询前添加EXPLAIN可查看是否使用索引、扫描行数等信息,核心字段包括type(连接类型)、key(实际使用索引)、rows(扫描行数)和Extra(额外信息),如出现type=ALL、key=NULL或Extra=Using filesort则需优化,…

    2026年9月8日
    000
  • laravel怎么实现API的token认证_laravel API Token认证实现方法

    答案:本文介绍Laravel中三种API Token认证实现方式。首先使用Laravel Sanctum生成token并保护路由;其次通过Passport实现OAuth2认证,支持复杂授权流程;最后可自定义token机制,手动验证请求中的Bearer Token。 如果您在开发 Laravel 应用…

    2026年9月8日
    100
  • 腾讯朱雀大模型登录 朱雀AI检测官网平台入口

    腾讯朱雀AI检测官网入口是https://matrix.tencent.com/ai-detect/,无需登录即可使用,支持文本、文档和图像中AI生成内容的快速检测。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 腾讯朱雀大模型登录入口在哪…

    2026年9月8日
    100
  • JavaFX Timeline多频率动画实现:解决1FPS限制的方案

    在JavaFX应用开发中,Timeline是一个强大的动画工具,它允许开发者通过定义一系列KeyFrame来创建时间驱动的动画。然而,当尝试在一个Timeline实例中集成多个具有不同执行频率(例如,每秒60次更新、每秒120次绘制、每秒1次统计)的任务时,可能会遇到一个常见且令人困惑的问题:所有任…

    2026年9月8日
    000
  • linux系统下dup和dup2函数解析

    linux系统下dup和dup2函数解析linux系统下dup和dup2函数解析linux系统下dup和dup2函数解析linux系统下dup和dup2函数解析

    —-今天接着昨天的话题讲,在昨天的文章里面,我们讲到了文件共享有三种实现方式,其中一种实现方式就是我们今天要讲的dup和dup2函数来实现了;那么咋们也就不废话 了,直接直奔主题吧。 一、dup函数解析: 1)首先我对这个dup函数的用法也不熟,所以说用man手册来查,这是最好的学习方法…

    2026年9月8日 用户投稿
    700
  • PHP怎么防止图片盗链_PHP保护服务器图片资源安全

    答案是通过验证HTTP Referer并结合PHP脚本或服务器配置防止盗链。核心方法为:使用PHP脚本(如image.php)验证请求来源域名,允许指定域名访问图片,拒绝非法Referer请求;可处理空Referer为空时显示默认图或拒绝;相比Nginx防盗链,PHP更灵活但性能较低;还可结合Tok…

    2026年9月8日
    000
  • laravel怎么实现事件和监听器解耦_laravel事件监听器解耦实现

    通过事件与监听器机制实现 Laravel 应用逻辑解耦,1. 使用 Artisan 创建 UserRegistered 事件类并传递用户数据;2. 生成 SendWelcomeEmail 等监听器处理具体逻辑;3. 在 EventServiceProvider 中注册事件与监听器映射关系;4. 在控…

    2026年9月8日
    000
  • win11如何修复dll文件丢失的问题_Win11 DLL文件丢失问题修复方法

    首先使用系统自带的SFC和DISM命令修复系统文件,若无效则重新安装相关软件或运行库,如VC++ Redistributable或DirectX;也可借助金山毒霸电脑医生等可信DLL修复工具一键修复;手动下载DLL需确保版本匹配并正确注册;最后可检查回收站或使用Windows File Recove…

    2026年9月8日
    300
  • Safari浏览器标签页崩溃怎么办 Safari浏览器标签页闪退修复方法

    Safari频繁崩溃多因缓存冲突或系统问题,可依次清除浏览数据、重启设备、更新iOS系统、关闭阻止弹出式窗口功能来解决;若无效且仅特定网站异常则为网站兼容性问题,若全部页面均不稳定可备份后还原所有设置。 遇到Safari浏览器标签页频繁崩溃或闪退,多数情况是缓存冲突、系统小故障或软件兼容性问题导致的…

    2026年9月8日
    100
  • 解决Android多模块应用中Hilt与Application类冲突的策略

    在android多模块应用开发中,dagger hilt作为一款强大的依赖注入框架,极大地简化了依赖管理。然而,当项目结构复杂,尤其涉及多个application类时,hilt的集成可能会遇到挑战,导致运行时错误,例如常见的java.lang.illegalstateexception: hilt …

    2026年9月8日
    100
  • 手机淘宝怎么代取货?淘宝怎么代取件

    可通过菜鸟驿站代收或设置他人代取快递。2. 下单时选代收点,后续可修改或取消。3. 包裹到站后可生成代取码授权他人领取。 如果您需要帮助他人代取在淘宝上购买的商品,或者希望设置由他人代为领取您的快递,可以通过淘宝提供的代收货服务和找人代取功能来实现。这些功能允许您选择附近的代收点或授权指定人员代为取…

    2026年9月8日
    100
  • 定制VSCode嵌入式Linux内核开发工具与驱动调试套件

    配置VSCode用于嵌入式Linux内核与驱动开发需:1. 安装C/C++扩展并生成compile_commands.json实现精准代码导航;2. 使用Bear工具记录编译命令,通过c_cpp_properties.json或clangd解析宏与头文件;3. 在tasks.json中定义交叉编译任…

    2026年9月8日
    100
  • ai短视频一键生成免费入口

    免费AI短视频一键生成工具推荐: 白日梦ai:aibrm.com 讯飞绘镜:typemovie.art 白日梦AI具备强大的视频生成能力,支持从文本或图片直接生成视频内容,动态画面控制精准,角色形象保持高度一致,单个视频最长可达6分钟。其文本生成视频功能融合了先进的自然语言处理与图像生成技术,只需输…

    2026年9月8日
    200
  • 手机淘宝怎么更改主页?手机淘宝怎么更改主页背景

    打开淘宝APP进入“我的淘宝”页面,点击背景图区域更换背景;2. 可从手机相册选择图片或从主题图库挑选背景图;3. 还可通过“主题换肤”功能更改图标、字体等整体风格。 如果您希望自定义手机淘宝的主页外观,使其更具个性化,可以通过更换主页背景或主题皮肤来实现。以下是具体的操作方法: 本文运行环境:iP…

    2026年9月8日
    000
  • 解决WordPress插件中wpdb对象为null导致MySQL更新失败的方案

    本文旨在解决wordpress插件开发中,使用`$wpdb->query()`进行mysql数据更新时遇到的`call to a member function query() on null`错误。核心问题在于`$wpdb`全局对象未正确初始化,其根本原因通常是缺少对wordpress核心配…

    2026年9月8日
    200
  • mac怎么解压rar文件_mac解压RAR文件教程

    macOS不支持RAR解压,可通过安装The Unarchiver、使用终端unrar命令或Keka工具实现。 如果您尝试在mac上打开一个文件,但系统无法识别或解压该压缩包,则可能是由于该文件为RAR格式,而macOS默认不支持此类格式的解压。以下是解决此问题的具体步骤: 本文运行环境:MacBo…

    2026年9月8日
    100
  • 如何在mysql中分析事务执行情况

    答案:通过information_schema.INNODB_TRX、performance_schema.data_locks、SHOW ENGINE INNODB STATUS等工具可分析MySQL事务状态、锁等待及死锁情况,结合sys schema视图和长期事务监控,有效诊断InnoDB事务执…

    2026年9月8日
    300

发表回复

登录后才能评论
关注微信