博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++读写二进制文件
阅读量:6992 次
发布时间:2019-06-27

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

 最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧

    1、读二进制信息

1   bool bRet = true;  2     std::ofstream fout(szDestFile, std::ios::binary | std::ios::app);  3     std::ifstream fin(szOrigFile, std::ios::binary);  4   5     if (fin.bad())  6     {  7         bRet = false;  8     }  9     else 10     { 11         while(!fin.eof()) 12         { 13             char szBuf[256] = {
0}; 14 15 fin.read(szBuf, sizeof(char) * 256); 16 17 if (fout.bad()) 18 { 19 bRet = false; 20 break; 21 } 22 23 // 24 fout.write(szBuf, sizeof(char) * 256); 25 } 26 } 27 28 fin.close(); 29 fout.close();
View Code

    这种方式读写二进制信息适用于读取一些二进制结构信息,如果读取像图片这样的二进制文件时,特别不方便,那么久需要一次性的读取文件的所有内容。

C++实现方式:测试通过

1 filebuf *pbuf;  2   ifstream filestr;  3   long size;  4   char * buffer;  5   // 要读入整个文件,必须采用二进制打开   6   filestr.open ("test.txt", ios::binary);  7   // 获取filestr对应buffer对象的指针   8   pbuf=filestr.rdbuf();  9    10   // 调用buffer对象方法获取文件大小 11   size=pbuf->pubseekoff (0,ios::end,ios::in); 12   pbuf->pubseekpos (0,ios::in); 13     14   // 分配内存空间 15   buffer=new char[size]; 16     17   // 获取文件内容 18   pbuf->sgetn (buffer,size); 19    20   filestr.close(); 21   // 输出到标准输出 22   cout.write (buffer,size); 23    24   delete []buffer; 25 26 C方式:27     FILE * pFile; 28     long lSize; 29     char * buffer; 30     size_t result; 31      32       33     pFile = fopen ("test.txt", "rb" ); 34     if (pFile==NULL) 35     { 36         fputs ("File error",stderr); 37         exit (1); 38     } 39  40      41     fseek (pFile , 0 , SEEK_END); 42     lSize = ftell (pFile); 43     rewind (pFile); 44  45       46     buffer = (char*) malloc (sizeof(char)*lSize); 47     if (buffer == NULL) 48     { 49         fputs ("Memory error",stderr);  50         exit (2); 51     } 52  53      54     result = fread (buffer,1,lSize,pFile); 55     if (result != lSize) 56     { 57         fputs ("Reading error",stderr); 58         exit (3); 59     } 60      61     printf("%s", buffer);  62  63      64     fclose (pFile); 65     free (buffer);
View Code

 

转载于:https://www.cnblogs.com/swarmbees/p/5621586.html

你可能感兴趣的文章
如何从互联网获取Puppet的各项特殊资源
查看>>
Smack知识知多少
查看>>
Amazon Workspace DaaS服务快速导读
查看>>
修改LigerUI的导航栏,改为Tab标签模式
查看>>
VMware View 与Citrix XenDesktop 用户体验大比拼-iPad篇
查看>>
Windows 10 TH2改进
查看>>
虚拟桌面的备份恢复最佳实践 第一部分
查看>>
视频营销,带来SKYCC组合营销软件火爆热销?
查看>>
SuperMap IS.NET不出图的常见问题
查看>>
闲聊Redis
查看>>
flex 学习总结
查看>>
Windows Phone 7 ManipulationStarted 事件
查看>>
解决ubuntu下软件包没有完整安装导致新立得无法打开
查看>>
配置GDB以支持查看stl容器数据
查看>>
Sql Server2005 Transact-SQL 新兵器学习总结之-TRY…CATCH
查看>>
WPF中MVVM模式原理分析与实践(转)
查看>>
javascript控制不同行不同颜色
查看>>
软件工程 软件的估计为什么这么难
查看>>
“如何有效沟通”培训小结
查看>>
[原创].串行ADC TLC549读取实验,Verilog版本
查看>>