linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...

一、前言

在做一个镜头的初始化操作,需要加载一个648*522像素大小的文件,厂商提供的是一个excel表,如果要加载数据,可用加载txt文本的方式,我选用二进制方式加载文件;大家都知道电脑真正执行的不是高级语言,而是0和1的二进制文件,而且不管你是几维的数据,存放计算机内存上的数据是一维,而且按一定顺序执行下来(虽然操作系统原理介绍到在宏观上有并行处理,但微观上还是串行执行的)。所以直接加载二进制文件效率是最高的,摒弃了数据转换所涉及的一个资源开销,有时候还会有精度损失。

二、操作二进制文件相关的函数

操作二进制的相关函数,引用标准库头文件#include

/*

*@fopen 该函数打开一个特定的文件,并返回一个流于该文件进行关联;

*@param name:打开文件或者一个设备的名称;

* mode:提示打开文件的方式;

* ①文本文件: 读取:“r”,写入“w”,添加“a”;

* ②二进制文件:读取:“rb”,写入“wb”,添加“ab”;

* 读取mode:要求所打开的文件一定要存在;

* 写入mode:当打开的文件不存在,程序会新建一个文件;但打开的文

* 件存在,会删除原始内容重新写入数据;

* 添加mode:当打开的文件不存在,程序会新建一个文件;但打开的文

* 件存在,在原始内容上继续添加内容;

*@return fopen函数的返回FILe*类型,成功返回非NULL

*/

FILE* fopen(char const *name, char const *mode);

/*

*@fclose 关闭流函数;

*@param fp:所要关闭的流;

*@return fclose在文件关闭之前刷新缓冲区,成功执行返回零值,失败返回EOF;

*/

int fclose(FILE* fp)

/*

*@fread 二进制文件读取函数

*@param buffer:读取的数据所存放内存位置的指针;

* size: 缓冲区每个元素的Byte数,可用sizeof(类型)判断;

* count: 读取数据的元素个数;

* stream:要读取的数据流

*@return fread返回实际读取元素的数目(非字节数,由读取每个元素的类型决定)

*/

size_t fread(void *buffer, size_t size, size_t count, FILE* stream);

三、程序测试

1、数据源的获取

excel的数据源如下图,从红色标示可以看出数据庞大,30多万的数据:

fd4847aec4d79eb7f9dc93bf1f4df8b7.png

把excel的数据导成txt文件;

b3a9b822a0a6f7ab719f1f05df4d2d44.png

再把txt文件用工具转换成二进制文件;

2、测试main函数

#include

//#include //用linux环境的gcc4.6.2编译,没有此头文件在分配动态内存时会警告malloc与free不兼容的问题

#define COL 522//数据的列

#define ROW 648//数据的行

int main(int argc, int *argv[]){

FILE * fp = NULL;//定义先赋值为NULL

unsigned char *buf;

int ret, i= 1;

//分配动态内存保存读取二进制文件的数据,因为每个点的值在0~255之间(0~1111 1111),用8位bit的char型即可;

buf = (unsigned char *)malloc(ROW*COL*sizeof(char));

//打开二进制文件,选取相应的模式,我的STD6DDAC.BIN二进制文件放在LINUX系统的/opt/目录下;

fp = fopen("/opt/STD6DDAC.BIN", "rb");

if( NULL == fp ){

return (-1);

}

//读取文件,并返回所读取char型数据元素的个数;

ret = fread(buf, sizeof(unsigned char), ROW*COL, fp);

if(ret < 0){

printf("read data error!n");

}

printf("The value of ret is:%dn", ret);

//读取前100个数据,可以打印上面数据源的100个数据

printf("Read the first 100 data______n");

for(i = 0;i < 100;i++){

printf("%dt", buf[i]);

if((i+1)%10 == 0){

printf("n");

}

}

//判断数据是否完整,读取后100个数据基础上并多读2个数据;

printf("Read more than two data more than last 100 data___n");

for(i = ROW*COL-100;i < ROW*COL+2;i++){

printf("%dt", buf[i]);

if((i+1)%10 == 0){

printf("n");

}

}

printf("n");

fclose(fp);//关闭文件,避免内存泄露或下次访问出错;

fp = NULL;//文件指针指向空,避免出现游离指针;

free(buf);//释放所开辟的动态内存;

return 0;

}

3、测试结果

3f75800721b73818316e2b6111b2ebd0.png

可以看到读取的数据元素个数为:338256 = 648*522;所以在打开文件或者读取数据之后,千万千万一定一定要加判断,可以查看程序是否操作成功,为调试代码提供不了不少方便;而且前面前面的数据与上面excel中数据源完全匹配(由excel数据太多,右端的部分数据显示不出来),而读取超出338256个数据之后的2个数据,完全是0,可以判断读取二进制文件的数据时成功的。fwrite()函数就不用细说了,原理跟fread()类似,只是一个是写入,一个是读取;

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

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

相关文章

二维码提升对比度文献调研(2)--Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

简介 论文 &#xff08;期刊和发表时间&#xff09; Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement (CVPR 会议 2020)论文链接 https://openaccess.thecvf.com/content_CVPR_2020/html/Guo_Zero-Reference_Deep_Curve_Estimation_for_Low-Light_Imag…

python打开是什么样子的图片_黑洞6问:黑洞内部是什么样子?黑洞图片发布,理论和实测的碰撞...

在科学领域&#xff0c;没有什么比你在第一次观察或实验结果中验证一个长期的理论预测时更令人兴奋的了。2012年&#xff0c;大型强子对撞机揭示了希格斯玻色子——标准模型中最后未发现的基本粒子的存在。 几年前&#xff0c;LIGO合作直接探测到了引力波&#xff0c;证实了对爱…

二维码提升对比度文献调研(3)--A Low-Complexity Algorithm for Contrast Enhancement of Digital Images

简介 &#xff08;1&#xff09;论文&#xff08;包括期刊和发表时间&#xff09;&#xff1a;A Low-Complexity Algorithm for Contrast Enhancement of Digital Images &#xff08;2&#xff09;论文链接&#xff1a; http://www.mecs-press.net/ijigsp/ijigsp-v10-n2/IJIG…

安卓checkbox无响应_【安卓手机】无法连接电脑的解决方法

转自&#xff1a;广西南宁平衡信息技术有限公司&#xff0c;作者&#xff1a;平衡LivY一般在对手机的数据采集过程中&#xff0c;尤其是安卓手机&#xff0c;最令人头疼的就是手机接入电脑后无法识别。相信以下窗口是大家在做手机取证的时候最不想看到的。那么这里大伙就会有疑…

linux s删除第一行,Linux文本处理三驾马车之一sed

sed对"行"操作动作含义a &#xff1a;新增&#xff0c; a 接字串&#xff0c;而这些字串会在新的一行出现(目前的下一行)&#xff5e;sed 1a\llll llllllll \n lllllll t.txtnl /etc/passwd | sed 2a drink teased -i $a# This is a test regular_express.txt ####文…

二维码提升对比度文献调研(4)--Attention Guided Low-light Image Enhancement

简介 &#xff08;1&#xff09;论文2&#xff1a; Attention Guided Low-light Image Enhancement with a Large Scale Low-light Simulation Dataset &#xff08;2&#xff09;论文链接&#xff1a; https://arxiv.org/pdf/1908.00682v3.pdf &#xff08;3&#xff09;源代…

函数传参string_C/C++的三种函数传值方式及其区别

C/C函数传参方式我想很多朋友应该都知道&#xff0c;但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚。本文就给大家揭露一下各传参方式的区别。传参方式有这三种&#xff1a;值传递、引用传递、指针传递大家可以去看三种传递方式的写法的区别&#xff0c;关于写…

二维码提升对比度文献调研(5)--DeepLPF: Deep Local Parametric Filters for Image Enhancement

简介 &#xff08;1&#xff09;论文名称&#xff1a; DeepLPF: Deep Local Parametric Filters for Image Enhancement CVPR 2020 &#xff08;2&#xff09;论文链接&#xff1a; https://arxiv.org/abs/2003.13985 &#xff08;3&#xff09;源代码&#xff1a; https://gi…

c语言单选题大全,C语言单选题(五)

1.C语言结构体类型变量在程序执行期间(C)。A.部分成员驻留在内存中B.只有一个成员驻留在内存中C.所有成员一直驻留在内存中D.没有成员驻留在内存中2.当定义一个结构体变量时&#xff0c;系统分配给它的内存是(D)。A.结构中最后一个成员所需内存量B.结构中第一个成员所需内存量C…

java 匿名函数_Java 理论与实践,闭包之争

Java 语言是否应增加闭包以及如何添加&#xff1f;在跨越边界 系列最近的一篇文章中&#xff0c;我的朋友兼同事 Bruce Tate 以 Ruby 为例描述了闭包的强大功能。最近在安特卫普召开的 JavaPolis 会议上&#xff0c;听众人数最多的演讲是 Neal Gafter 的 “向 Java 语言增加闭包…

二维码识别中面临的主要问题

问题描述 下面有两个二维码的图片&#xff1a; 这两个二维码其实是一样的&#xff0c;也就是二维码码制在设计的时候&#xff0c;其实不需要那么大的黑点&#xff0c;只需要中心一小部分即可。 问题一&#xff1a;在优化二维码的过程中&#xff0c;能否考虑优化边缘部分&…

lia人是什么意思_69年属鸡人终身灾难是什么意思

69年属鸡人终身灾难是什么意思69年出生的生肖鸡&#xff0c;他们为人正直&#xff0c;有一颗转速飞快的脑袋&#xff0c;做事勤快&#xff0c;对生活非常乐观&#xff0c;但是因为过于自信总是做一些自己能力还不够的事&#xff0c;有句老话说的好“大难不死&#xff0c;必有后…

睡眠声音识别中的准确率问题(一)--问题描述及评价指标

1 问题描述 如何定义一个评价指标来评估睡眠声音识别中的准确率&#xff1f; 1.1 按照评分如何设计评价指标 睡眠声音识别预测的结果是一个概率分布&#xff0c;如下表所示&#xff1a; c1c_1c1​c2c_2c2​c3c_3c3​snortspeechcough0.50.20.70.550.450.77 在这种场景下&…

c51 嵌入汇编语言,在C51中嵌入汇编

在C51编程中&#xff0c;有时控制一些器件时&#xff0c;需要较强实时性&#xff0c;这时有必要在其中嵌入ASM语句&#xff0c;关于嵌入的方法众多&#xff0c;网上也可以找到相关说明&#xff0c;不过说得并不详细&#xff0c;这里结合本人调试18B20测温程序来说说如何在C中嵌…

睡眠声音识别中的准确率问题(二)--测试结果及分析

1 测试数据集介绍 &#xff08;1&#xff09;Audioset数据集&#xff1a; 从该数据集中筛选出鼾声数据500条&#xff1b; &#xff08;2&#xff09;人工采集的数据集&#xff1a;我们收集了鼾声及咳嗽数据50条&#xff0c;其中鼾声数据40条&#xff0c;咳嗽数据10条&#xff…

睡眠声音识别中的准确率问题(三)--采集的音频测试结果及分析

简介 本次我们对自己采集的93条Snoring音频进行测试并分析。 不区分音频质量的测试。 分别测试了NNN取1-5、8以及10时候的准确率&#xff0c;测试结果如下所示&#xff1a; N2345810Accuracy0.27960.47310.49460.49460.54840.5699 分析&#xff1a;从上表中可以得出…

中文 转gbk编码_go查找中文首字母

前言常见的通讯录都是按首字母来排序的&#xff0c;想象一下你要实现一个首字母排序的功能&#xff0c;若是全英文&#xff0c;那将会是一件很轻松的事情&#xff0c;一般语言层面就会提供排序方法&#xff0c;亦或自己实现也不是难事&#xff0c;那如果存在中文呢&#xff1f;…

语音增强相关技术综述

1 非监督语音增强技术 2 监督语音增强技术 3 github上提供的源代码及分析 3.1 Dual-signal Transformation LSTM Network 简介 https://github.com/breizhn/DTLN 用于实时噪声抑制的堆叠双信号变换 LSTM 网络 (DTLN) 的 Tensorflow 2.x 实现。这个存储库提供了在 python …

睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结)

1 结构体 此部分定义了两个结构体用于存储音频信息&#xff1a; AudioFragment&#xff1a;用于存储单个音频片段&#xff08;0.975s, 16000Hz&#xff09;的标签评分信息&#xff1b;AudioInfo&#xff1a;用于存储整个音频信息&#xff0c;包含音频文件名、时间等基础信息&…

js 字符串替换_正则精要:玩转JS正则表达式,也许只需这一篇(建议收藏)

0.导引在正文开始前&#xff0c;先说说正则表达式是什么&#xff0c;为什么要用正则表达式&#xff1f;正则表达式在我个人看来就是一个程序可以识别的规则&#xff0c;有了这个规则&#xff0c;程序就可以帮我们判断某些字符是否符合我们的要求。但是&#xff0c;我们为什么要…