C++读写二进制文件【DOC精选】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C读写二进制文件【DOC精选】

2005-5-11 C++读写二进制文件 前几天写一个音频隐藏程序时碰到点问题,要读写二进制文件。 一开始,我的程序看起来像是这样: //... static string FILENAME = test.wav; ifstream iStream; iStream.open(FILENAME.c_str()); char buffer[1024]; while (iStream.read(buffer, sizeof(buffer) / sizeof(char))) { ??? //...这里对读到的字节进行处理 } iStream.close(); //... 可是循环几次后就“无故”跳出,文件根本没读完,可是程序码好像也没错。 为了测试二进制的读取,我特地写了个程序, 看起来像这样: //... static string FILENAME = test.wav; ifstream iStream; iStream.open(FILENAME.c_str()); char ch; while (iStream.get(ch)) { ??? cout ch; } iStream.close(); //... 程序输出一部分字符后,就不再输出了,怎么回事?我把iostream以及fstreamr的读取、写入API都查了个便,好像没有什么发现,这段程序码 应该不会有问题的! 回忆以前写C代码的日子,fopen函数有个b参数,表示是二进制读写方式打开, 是否fstream也有二进制开启的参数? 一查MSDN果然如此, 这 个参数是 ios_base::binary。 马上行动,以上程序改成这样: //... static string FILENAME = test.wav; ifstream iStream; iStream.open(FILENAME.c_str(), ios_base::binary);?// 二进制模式 char ch; while (iStream.get(ch)) { ???? cout ch; } iStream.close(); //... 哈哈,这回程序终于可以读取全部字节了,而且喇叭还嘟嘟地叫呢(二进制码当作字符输出,有些是空白,有的还会鸣喇叭(07h),呵呵)。 可是为什么?读出都是字节,都是无格式,打开时以二进制和默认方式打开有什么区别吗? 别急,上面解决了怎么读,下面让我们写一点东西吧! #include iostream #include fstream #include string using namespace std; int main() { ??? static string FILENAME = test.txt; ??? ofstream oStream; ??? oStream.open(FILENAME.c_str());??// 标准(字符)模式打开哦 ????oStream Hello World! endl;?// 写个换行符 ??? oStream Hello World!; ??? oStream.close(); } 程序很简单,运行后产生test.txt文件,文件大小为26字节, 文件内容是这样: Hello World! Hello World! 明明是24个字节嘛,呵呵,算上一个换行符 0dh 0ah 就是26个字符了。 用ultra edit打开看是这样: 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0D 0A 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 很清楚了吧! 下面我们把程序改成这样: #include iostream #include fstream #include string using namespace std; int main() { ??? static string FILENAME = test.txt; ??? ofstream oStream; ??? oStream.open(FILENAME.c_str(), ios_base::binary);?// 二进制形式打开 ??? oStream Hello World! endl;?// 写个换行符 ????oStream Hello World!; ??? oStream.close(); } 运行后同样产生test.txt文件,咦!怎么少了一个字节(25个),打开后看是这样: Hello World! Hello World! 用ultra edit 打开,是这样: 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A 48 65 6C 6

文档评论(0)

taotao0b + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档