博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
F2FS readblock PNG图片文件头不正确问题
阅读量:6176 次
发布时间:2019-06-21

本文共 766 字,大约阅读时间需要 2 分钟。

正确:89 50 4E 47 0D 0A 1A 0A

错误:89 50 4E 47 0A 0A 1A 0A

需要用c++ 代码读取一帧图像的内容,图像大小为1368*768*4 = 4202496

代码如下:

char* buf = new char[4202496];  ifstream fs("1.data");        fs.read(buf,4202496);  cout << fs.gcount() << endl;

 

每次输出的gcount 都是217 ,无法读出指定数量的字节。

找了半天原因,发现在218字节位置文件二进制内容是0x1A,而0x1A 在ascii 码中代表EOF,所以文件读取到这个位置结束

这才发现原来是文件默认是以ascii 码的方式打开的,以二进制打开则解决问题。

ifstream fs("1.data",std::ifstream::binary);  fd = _open(c->device_name, O_RDWR| O_BINARY);

 

参考资料:

文本文件和二进制文件区别:

文本文件读写;读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

二进制文件读写: 不对文件做任何处理,读到\x1a 当作一个普通的字节,继续读取

文件结束

EOF:EOF只是代表一个整形常量-1。因此很多人认为在文件的末尾存在这个结束标志EOF,这种观点是错误的。事实上在文件的末尾是不存在这个标志的。

读取文件过程中读到文件末尾,或者触发某种异常读取失败都会返回EOF,真正的判断文件结束应该用feof() 函数(文本文件和二进制都管用)

转载于:https://www.cnblogs.com/Browneyes/p/8464138.html

你可能感兴趣的文章
Java开发的你,准备好何时跳槽了吗?
查看>>
css3实现椭圆轨迹旋转
查看>>
java新手小白必看的学习路线图,快速入门!
查看>>
(四十八)java版spring cloud+spring boot+redis多租户社交电子商务平台-SpringCloud Gateway...
查看>>
java B2B2C Springcloud多租户电子商城系统-集成项目简介
查看>>
Java进阶架构师之如何画好架构图?阿里大神手把手教你!
查看>>
Node8.0 之 Napi 探秘
查看>>
TypeScript入坑
查看>>
(三)spring cloud微服务分布式云架构-服务网关zuul初级篇
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
查看>>
ubuntu老旧软件源
查看>>
Linux服务器配置——SAMBA
查看>>
我的WP7应用
查看>>
js打开连接 _无需整理
查看>>
(一) 实现用字符串作为switch的case子句
查看>>
图片缩放
查看>>
区块链概念及应用解读
查看>>
我的友情链接
查看>>
利用logrotate切割nginx日志
查看>>
McAfee EPO迁移
查看>>