当前位置: 首页 > 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) 代…...

Gradio项目快速公网演示:除了share=True,你还有这几种轻量级内网穿透方案

Gradio项目快速公网演示&#xff1a;5种轻量级内网穿透方案横向评测 当你开发了一个酷炫的机器学习模型演示&#xff0c;或是精心设计的数据可视化界面&#xff0c;最迫切的需求往往是如何快速分享给同事或客户。Gradio的shareTrue参数可能是大多数开发者首先想到的方案&#x…...

SDMatte抠图实战教程:玻璃/薄纱/羽毛一键去背景,保姆级Web部署指南

SDMatte抠图实战教程&#xff1a;玻璃/薄纱/羽毛一键去背景&#xff0c;保姆级Web部署指南 1. 为什么选择SDMatte进行专业抠图 在日常设计工作中&#xff0c;抠图是最基础也最耗时的环节之一。特别是遇到玻璃制品、薄纱材质、羽毛边缘这类复杂对象时&#xff0c;传统Photosho…...

深入解析Shim在跨版本API兼容中的实战应用

1. 什么是Shim技术 第一次听到"Shim"这个词是在调试一个Flink连接Hive的项目时。当时Hive版本从2.3升级到3.1&#xff0c;本以为要重写大量代码&#xff0c;结果同事说"加个Shim就行了"。这种"神奇胶水"般的技术让我印象深刻。 Shim本质上是一种…...

OpenClaw自动化测试:百川2-13B驱动的前端元素定位与交互验证

OpenClaw自动化测试&#xff1a;百川2-13B驱动的前端元素定位与交互验证 1. 从手工测试到智能测试的进化之路 作为一名长期奋战在前端测试一线的开发者&#xff0c;我经历过从纯手工点击到Selenium脚本&#xff0c;再到Playwright框架的技术迭代。每次升级都带来效率提升&…...

JDK24虚拟线程pinning问题终于解决了!手把手教你如何避免同步代码块阻塞

JDK24虚拟线程pinning问题深度解析与实战优化指南 虚拟线程作为Java平台近年来最重要的并发模型革新&#xff0c;从JDK21的初次亮相到JDK24的成熟完善&#xff0c;已经逐步改变了Java开发者处理高并发的思维方式。本文将带您深入理解pinning问题的本质&#xff0c;掌握JDK24中的…...

OpenClaw+GLM-4.7-Flash:智能爬虫与数据分析

OpenClawGLM-4.7-Flash&#xff1a;智能爬虫与数据分析 1. 为什么需要智能爬虫与数据分析 最近我在做一个小型竞品分析项目时&#xff0c;遇到了一个典型的数据收集困境&#xff1a;需要从20多个竞品网站抓取产品功能描述、定价策略和用户评价&#xff0c;然后整理成结构化数…...

从AHB到AXI:手把手带你用Verilog仿真看Outstanding如何提升SoC数据吞吐

从AHB到AXI&#xff1a;深入解析Outstanding机制如何优化SoC数据吞吐效率 在复杂的SoC设计中&#xff0c;总线架构的选择直接影响系统性能。传统AHB总线虽然结构简单&#xff0c;但在高并发场景下容易成为瓶颈。AXI协议通过引入Outstanding、Out-of-order等机制&#xff0c;显著…...

交易数据一致性保障:大数据环境下的挑战

交易数据一致性保障:大数据环境下的挑战 1. 引入与连接:数字世界的"货币守卫" 想象一下:当你在电商平台下单支付后,银行显示扣款成功,但商家却显示支付失败;或者在股票交易中,你看到的股价与实际成交价格存在差异。这些看似微小的数据不一致,可能导致企业声…...

如何快速掌握扩散模型:PyTorch实现的终极指南

如何快速掌握扩散模型&#xff1a;PyTorch实现的终极指南 【免费下载链接】Diffusion-Models-pytorch Pytorch implementation of Diffusion Models (https://arxiv.org/pdf/2006.11239.pdf) 项目地址: https://gitcode.com/gh_mirrors/di/Diffusion-Models-pytorch 想要…...

Python内存泄漏分析实战指南(生产环境零停机排查全流程)

第一章&#xff1a;Python内存泄漏的本质与危害Python内存泄漏并非源于C语言中常见的“未释放malloc内存”&#xff0c;而是指对象被意外长期持有&#xff0c;导致垃圾回收器&#xff08;GC&#xff09;无法将其回收&#xff0c;从而持续占用堆内存。其本质是**引用关系的非预期…...