当前位置: 首页 > news >正文

C++读取.bin二进制文件

C++读取.bin二进制文件

在C++中,可以使用文件输入/输出流来进行二进制文件的读写操作,方便数据的保存和读写。

//C++读取bin二进制文件
int read_bin()
{std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);if (file) {// 按照二进制格式读取数据file.seekg(0, std::ios::end);long long fileSize = file.tellg();printf("size of firm: %lld\n", fileSize);// 将读写位置移动到文件开头,申请内存,将固件内容存入bufferfile.seekg(0, std::ios::beg);char* buffer = new char[fileSize];file.read(buffer, sizeof(char)*fileSize);// 打印读取到的数据(以十六进制的形式)for (int i = 0; i < fileSize;){//if (i % 16 != 0)if (i % 8 != 0){printf(" ");}printf("%02X", (unsigned char)buffer[i]);//std::cout << std::hex << static_cast<int>(static_cast<unsigned char>(buffer[i])) << " ";i++;//if (i % 16 == 0)if (i % 8 == 0){printf("\n");}}delete[] buffer;file.close();}else {std::cout << "Failed to open file." << std::endl;}return 0;
}

C语言,二进制数转为十进制数

#include<stdio.h>
#include<math.h>//二进制补码转十进制
int bin2dec()
{unsigned char binaryInteger[] = { 1, 0, 1, 1, 1, 1, 0, 1 };int s=0, i=0, j=0;int length = sizeof(binaryInteger) / sizeof(unsigned char);for (i = length - 1, j = 0; i >= 0; i--, j++){s = s + binaryInteger[i] * pow(2, j);}printf("无符号十进制整数为%d", s);//189//有符号的二进制补码转化为十进制 if (binaryInteger[0] == 1){//符号位为1 s = 0;for (i = length - 1, j = 0; i > 0; i--, j++){s += binaryInteger[i] * pow(2, j);}s = s - binaryInteger[0] * pow(2, length - 1);//符号位计算时取负值 }else{//符号位为0 s = 0;for (i = length - 1, j = 0; i >= 0; i--, j++){s = s + binaryInteger[i] * pow(2, j);}}printf("有符号十进制为%d", s);//-67return 0;
}

指定格式输出

#include<iostream>
#include<iomanip>using namespace std;int f_geshishuchu() 
{int a = 15;cout << std::oct << a << endl;//八进制cout << dec << a << endl;//十进制cout << hex << a << endl << endl;//十六进制//setw()指定域宽cout << setw(10) << 3.1415 << endl;//必须包含iomanip头文件  //默认用空格填补cout << setw(10) << setfill('a') << 3.1415 << endl << "\n";//setfill括号里的字符只能是一个,否则会报错//setionsflags确定对齐方式cout << setw(10) << setfill('a') << setiosflags(ios::left) << 3.1415 << endl;cout << setw(10) << setfill('a') << setiosflags(ios::right) << 3.1415 << endl << "\n";double b = 35.1415926535798;//setprecision指定精度,包含小数点前面的cout << setprecision(3) << setiosflags(ios::left) << b << endl;//35.1return 0;
}

C语言fread()函数:从文件读取数据

C语言中的 fread() 函数是一个标准库函数,用于从文件中读取数据。在本文中,我们将详细介绍 fread() 函数的用法、参数和返回值,并提供一些示例代码来帮助读者更好地理解该函数。

函数原型和语法

fread() 函数的函数原型和语法如下所示:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
参数:
ptr:指向要读取数据的缓冲区;
size:每个数据项的字节数;
count:要读取的数据项数目;
stream:指向文件流的指针。
返回值:函数返回一个 size_t 类型的值,表示成功读取的数据项数目。

函数作用

fread() 函数可以从文件中读取二进制数据。它在读取数据时,会从文件流中读取 count 个数据项,每个数据项占用 size 个字节。它会将这些数据项存储到由 ptr 指向的缓冲区中,并返回成功读取的数据项数目。

函数使用示例

下面是一个简单的使用 fread() 函数的示例程序。该程序将从文件中读取整型数据,并将它们打印到控制台上。

#include <stdio.h>int main()
{FILE *fp;int buffer[100];int count, i;fp = fopen("data.bin", "rb");if(fp == NULL){printf("Failed to open file\n");return 1;}count = fread(buffer, sizeof(int), 100, fp);printf("Read %d integers:\n", count);for(i = 0; i < count; i++){printf("%d\n", buffer[i]);}fclose(fp);return 0;
}

在上面的示例程序中,首先打开一个名为“data.bin”的文件,以二进制读取方式打开。如果文件打开失败,则会打印一条错误消息并返回 1。接下来,程序将从文件中读取 100 个整型数据,并将它们存储在 buffer 数组中。读取完数据后,程序打印出读取的数据项数目,并将每个整数打印到控制台上。最后,程序关闭文件并返回 0。

注意事项

在使用 fread() 函数时,需要注意以下几点:

  • 如果文件流中的数据不足以满足要求,则函数只会读取尽可能多的数据,并返回已经读取的数据项数目。如果读取的数据项数目小于 count,则有可能是文件结束了,也有可能是发生了错误。此时,可以使用 feof() 函数来判断是否是文件结束了,或者使用 ferror() 函数来判断是否发生了错误;
  • 如果函数读取的数据项数目等于 count,则无法判断文件是否结束,因此需要在程序中自行判断是否到达了文件末尾;
  • 在使用 fread() 函数时,需要确保缓冲区足够大,以存储要读取的数据。如果缓冲区太小,则会导致数据被截断,从而影响程序的正确性;
  • 如果要读取的数据类型是结构体或者其他自定义类型,则需要注意字节对齐的问题。如果结构体中包含有填充字节,则 fread() 函数在读取数据时也会读取这些填充字节,从而影响程序的正确性。可以使用 #pragma pack(n) 指令来控制字节对齐的方式;
  • 在使用 fread() 函数时,需要确保文件已经打开并且以正确的方式打开。如果文件未打开或者打开方式错误,则 fread() 函数将无法正常工作。

总结

本文介绍了 C语言中的 fread() 函数的用法、参数和返回值。该函数可以从文件中读取二进制数据,并将数据存储到指定的缓冲区中。在使用该函数时,需要注意缓冲区的大小、数据类型的字节对齐、文件是否已经打开等细节问题。本文提供了一个简单的示例程序,帮助读者更好地理解 fread() 函数的用法。

相关文章:

C++读取.bin二进制文件

C读取.bin二进制文件 在C中&#xff0c;可以使用文件输入/输出流来进行二进制文件的读写操作&#xff0c;方便数据的保存和读写。 //C读取bin二进制文件 int read_bin() {std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);if (file) {// 按照…...

【ZZULIOJ】1038: 绝对值最大(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入3个整数&#xff0c;输出绝对值最大的那个数。 输入 输入包含3个int范围内的整数&#xff0c;用空格隔开。 输出 输出三个数中绝对值最大的数&#xff0c;单独占一行。若绝对值最大的数不唯…...

递归算法讲解2

前情提要 上一篇递归算法讲解在这里 递归算法讲解&#xff08;结合内存图&#xff09; 没看过的小伙伴可以进去瞅一眼&#xff0c;谢谢&#xff01; 递归算法的重要性 递归算法是非常重要的&#xff0c;如果想要进大厂&#xff0c;以递归算法为基础的动态规划是必考的&…...

机器学习第33周周报Airformer

文章目录 week33 AirFormer摘要Abstract一、论文的前置知识1. 多头注意力机制&#xff08;MSA&#xff09;2. 具有潜变量的变分模型 二、文献阅读1. 题目2. abstract3. 问题与模型阐述3.1 问题定义3.2 模型概述3.3 跨空间MSA&#xff08;DS-MSA&#xff09;3.4 时间相关MSA&…...

设计模式(12):代理模式

一.核心作用 通过代理&#xff0c;控制对对象的访问;可以详细控制访问某个对象的方法&#xff0c;在调用这个方法前做前置处理&#xff0c;调用这个方法后做后置处理。 二.核心角色 抽象角色&#xff1a; 定义代理角色和真实角色的公共对外方法;真实角色&#xff1a; 实现抽…...

前端9种图片格式基础知识, 你应该知道的

彩色深度 彩色深度标准通常有以下几种&#xff1a; 8位色&#xff0c;每个像素所能显示的彩色数为2的8次方&#xff0c;即256种颜色。16位增强色&#xff0c;16位彩色&#xff0c;每个像素所能显示的彩色数为2的16次方&#xff0c;即65536种颜色。24位真彩色&#xff0c;每个…...

ChatGPT 与 OpenAI 的现代生成式 AI(上)

原文&#xff1a;Modern Generative AI with ChatGPT and OpenAI Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 本书以介绍生成式 AI 领域开始&#xff0c;重点是使用机器学习算法创建新的独特数据或内容。它涵盖了生成式 AI 模型的基础知识&#xff0c…...

全量知识系统 程序详细设计之架构设计:一个信息系统架构

统架构&#xff0c;整体设计分成了三部分--三种方面&#xff1a;信息nformation、系统Syste 原文 以下是对全知系统程序详细设计需要的架构规划的考虑。 全知系统架构是一个信息系统架构&#xff0c;整体设计分成了三部分&#xff08;三种“方面”&#xff09;&#xff1a;信…...

从零开始:成功进入IT行业的方法与技巧

如今&#xff0c;信息技术&#xff08;IT&#xff09;行业成为了就业市场上的热门领域。由于其快速发展和广阔的职业机会&#xff0c;许多人希望能够进入这个行业。然而&#xff0c;对于没有任何相关背景知识的人来说&#xff0c;要成功进入IT行业可能会面临一些挑战。本文将分…...

SpringCloud - 如何本地调试不会注册到线上环境(Nacos)?

问题描述 有时候我们需要本地调试注册到 Nacos 上&#xff0c;但是会影响线上服务的 Feign 请求打到本地导致不通影响了线上业务。 原因分析 一般最传统的解决方案就是修改本地 bootstrap.yml 的 spring.cloud.nacos.discovery.namespace spring:application:name: app-serv…...

1.9 面试经典150题 除自身以外数组的乘积

除自身以外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0…...

【美团笔试题汇总】2023-09-02-美团春秋招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新美团近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f…...

小黑逆向爬虫探索与成长之路:小黑独立破解毛毛租数据加密与解密

前言 有道和招标网的加密入口定位在前面两期做了详细的介绍&#xff0c;本小结将通过简单的关键词搜索定位到加密与解密入口 数据接口寻找与请求 根据响应数据长度&#xff0c;确定数据接口&#xff0c;发现传入的参数需要加密&#xff0c;响应的结果需要解密&#xff0c;后…...

Generative Question-Answering with Long-Term Memory

...

深入浅出 -- 系统架构之微服务架构常见的六种设计模式

面向服务的架构&#xff08;SOA&#xff09; 面向服务的架构&#xff08;SOA&#xff09;是一种设计方法&#xff0c;也是一个组件模型&#xff0c;它将应用程序的不同功能单元&#xff08;称为服务&#xff09;通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的…...

SSM框架学习——SqlSession以及Spring与MyBatis整合

SqlSession以及Spring与MyBatis整合 准备所需要的JAR包 要实现MyBatis与Spring的整合&#xff0c;很明显需要这两个框架的JAR包&#xff0c;但是只是使用这两个框架中所提供的JAR包是不够的&#xff0c;还需要配合其他包使用&#xff1a; Spring的JAR包MyBatis的JAR包Spring…...

6、【单例模式】确保了一个类在程序运行期间只有一个实例

你好&#xff0c;我是程序员雪球 在软件设计中&#xff0c;单例模式是一种常见的设计模式。它确保了一个类在程序运行期间只有一个实例&#xff0c;并提供了全局访问该实例的方式。单例模式在许多场景中都有广泛的应用&#xff0c;例如共享资源管理、数据库连接、日志记录器等…...

vuex插件实现数据共享

vuex插件 vuex是管理多个vue通用的数据的插件.(状态管理工具,状态是数据) 我们对于多个vue文件之间的共同数据,是用props传递,或者对于一个vue实例对象,进行绑定,传参,也是多次传参,多个文件之间,比较麻烦. 但是我们vuex会创建一个公共对象,从这个公共对象上赋值,比较简单易…...

【吊打面试官系列】Redis篇 - 使用过 Redis 分布式锁么,它是什么回事?

大家好&#xff0c;我是锋哥。今天分享关于 【使用过 Redis 分布式锁么&#xff0c;它是什么回事&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 分布式锁么&#xff0c;它是什么回事&#xff1f; 先拿 setnx 来争抢锁&#xff0c;抢到之后&#…...

DashOJ-8.奇偶统计

题目链接&#xff1a; 题目详情 - 奇偶统计 - DashOJ 思路&#xff1a; &#xff08;while循环加if分支语句&#xff09; 巧用死循环 while(1) 然后在里面第一句就判断输入的数字是否等于0 if(x0) &#xff0c;如果 等于0就直接break跳出循环 或者用 while(cin>>x) 代…...

终极解放!淘宝自动任务神器让你每天多出30分钟自由时间

终极解放&#xff01;淘宝自动任务神器让你每天多出30分钟自由时间 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 你知…...

JumpServer堡垒机源码部署避坑实录:从MySQL权限到Node版本,我踩过的那些坑

JumpServer堡垒机源码部署避坑实录&#xff1a;从MySQL权限到Node版本&#xff0c;我踩过的那些坑 部署开源堡垒机JumpServer时&#xff0c;看似简单的make install背后藏着无数技术暗礁。去年我们团队在金融级内网环境部署JumpServer时&#xff0c;经历了从数据库权限锁死到前…...

Python金融数据获取终极指南:3分钟掌握同花顺问财数据采集

Python金融数据获取终极指南&#xff1a;3分钟掌握同花顺问财数据采集 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 想要快速获取同花顺问财的金融数据吗&#xff1f;pywencai是你需要了解的终极Python工具&…...

NotebookLM知识图谱构建实战:从PDF/会议纪要/代码注释自动提取实体关系(已验证217份技术文档)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM知识管理完整指南 NotebookLM 是 Google 推出的基于 AI 的知识协作者&#xff0c;专为结构化处理 PDF、TXT、网页等文本资料设计。它不依赖云端大模型实时生成内容&#xff0c;而是通过本地向…...

IDM试用期重置终极指南:告别30天限制的完整解决方案

IDM试用期重置终极指南&#xff1a;告别30天限制的完整解决方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否曾为Internet Download Manager&#xff08;IDM&#xff09;的…...

TMSpeech:Windows离线语音转文字的革命性工具,保护隐私的实时字幕解决方案

TMSpeech&#xff1a;Windows离线语音转文字的革命性工具&#xff0c;保护隐私的实时字幕解决方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而烦恼&#xff1f;担心语音数据泄露到云端&#xf…...

边缘AI推理芯片选型指南:从吞吐量到延迟的实战评估

1. 从数据中心到边缘&#xff1a;AI推理范式的根本性转变如果你正在为你的下一个AI项目选型硬件&#xff0c;尤其是在考虑将模型部署到摄像头、汽车或者医疗设备上&#xff0c;那么“边缘AI推理”这个词你一定不陌生。但很多人&#xff0c;包括一些经验丰富的工程师&#xff0c…...

基于Petals分布式网络的大语言模型聊天应用后端部署与API调用实战

1. 项目概述&#xff1a;一个基于分布式协作的大语言模型聊天应用后端最近在折腾大语言模型应用的时候&#xff0c;发现了一个挺有意思的项目&#xff1a;chat.petals.dev。这不仅仅是一个开源的聊天机器人Web应用&#xff0c;更关键的是&#xff0c;它背后连接着一个名为Petal…...

S32K3 FlexCAN实战:从MCAL配置到DMA接收,手把手教你避开那些手册里没写的坑

S32K3 FlexCAN深度实战&#xff1a;从寄存器配置到DMA优化全链路解析 在车载电子架构快速迭代的今天&#xff0c;S32K3系列MCU凭借其强大的FlexCAN模块成为汽车电子开发者的首选。但官方文档往往只勾勒出理想状态下的功能框架&#xff0c;当工程师真正着手实现CAN FD通信时&…...

从淘宝几块钱的2804云台电机开始,手把手教你DIY一个桌面机械臂关节(STM32/GD32 + SimpleFOC)

从零打造低成本机械臂关节&#xff1a;2804云台电机FOC控制实战指南 在创客圈里&#xff0c;机械臂项目总是让人既向往又却步——商用伺服电机动辄上千元的单价&#xff0c;让许多爱好者望而却步。但当我发现淘宝上仅售几元的2804云台电机时&#xff0c;一个大胆的想法诞生了&a…...