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() 函数的用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588344.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

plumelog日志查询使用指南

一、日志查询 字段说明 内容语法 1.中文需要用双引号包含 例如:"异常",默认会被按照单字体分割检索 2.多个检索条件可以用 AND OR NOT 来组合查询 例如 "异常" AND "内容" 3.单个不可分割单词可以用*开头或者结尾进行模糊匹配 例如 *NullPoi…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

实景三维在数字乡村建设中的重要作用

随着科技的飞速发展&#xff0c;数字乡村建设已成为推动乡村振兴、实现农村现代化的重要途径。实景三维技术作为数字乡村建设的重要支撑&#xff0c;正逐渐在各个领域发挥着不可或缺的作用。本文将从实景三维技术在数字乡村中的应用场景、优势及未来展望等方面进行探讨&#xf…

Brain.js 的力量:构建多样化的人工智能应用程序

机器学习&#xff08;ML&#xff09;是人工智能 (AI) 的一种形式&#xff0c;旨在构建可以从处理的数据中学习或使用数据更好地执行的系统。人工智能是模仿人类智能的系统或机器的总称。 机器学习&#xff08;ML&#xff09;与复杂的数学纠缠在一起&#xff0c;让大多数初学者…

时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…

盘点中国优秀付费资源站WordPress主题

中国优秀的付费资源站WordPress主题&#xff0c;它们专注于资源管理和分享&#xff0c;提供了丰富的功能和用户体验&#xff1a; 资源宝&#xff08;ziyuanbao&#xff09;&#xff1a;这是一款功能强大的资源站主题&#xff0c;支持多种资源类型的上传、分类和展示&#xff0…

html引入json文本测试数据

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 复现bug时&#xff0c;可以这样给前端准备测试数据。 dayData.json存放测试数据&#xff0c;只需声明为变量即可 这里不用管ide中的报错。 <!DOCTYPE html> <html lang"en">…

QT背景介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…

软考考哪个好?软考中级到高级方向该如何计划

刚接触软考的朋友可能对软考的科目选择比较迷茫&#xff0c;不知道自己该怎么选方向&#xff0c;怎么选级别&#xff0c;这属于再正常不过的事情了&#xff0c;毕竟谁看到这些都可能有些迷茫&#xff0c;要理清自己的选择还是要从自身的几个方面开始的。 软考的考试专业类别就…

使用ARCore深度API实现点云采集

一、深度API 本小节内容摘自ARCore官方文档。 ARCore 深度API Depth API 可助力实现对象遮挡、提升沉浸感和新颖的互动体验&#xff0c;从而增强 AR 体验的真实感。 在下图中&#xff0c;右侧画面是采用深度API进行遮挡后的效果&#xff0c;与左侧图相比更加真实。 深度值 给…

系统IO函数接口

目录 前言 一. man手册 1.1 man手册如何查询 1.2 man手册基础 二.系统IO函数接口 三.open打开文件夹 3.1 例1 open打开文件 3.2 open打开文件代码 3.3 例2 创建文件 四.write写文件 4.1 write写文件 五. read读文件 5.1 read读文件与偏移 5.2 偏移细节 5.3 read读文件代码 六.复…