C++输出二进制文件和文本文件
所谓二进制文件和文本文件对于字母而言没有什么不同,都是存储该字母的ASCII码值。能引起不同的是数字和一些排版用符号的格式。
- 数字在二进制文件中会存储该数字的值,而文本文件中则首先将该数字视为字符量,并按照ASCII码表转换为新的数字再存储;
- 排版符号的一个例子是换行符,二进制文件只是一个换行符,文本文件中则是换行符加上回车符;
所以简单的区分方法是文本文件对每个字符都要做ASCII转换,而二进制文件只会对字母做必要的ASCII转换,对数字则是直接存储的。
下来我们来讨论如何真正的实现二进制文件的建立:
并不是我们所认为的在打开文件时设定ios::binary就可以,还要注意输出的函数:
- 在使用<<输出时,实际上都会转换为文本文件输出。即如果输出一个数字,先是转换为相应ASCII码值作为字符串存储。用这种方法输出二进制文件的方法就是欺骗电脑——把double,int等数组强制转换为char型数组。注意不能是单个变量,因为double一个是4字节,char是1个字节,数组转换的同时数组大小也变化使得数据不丢失,但变量在强制转换的过程中一定会损失数据。当直接转换为char,实际上未经过转化,而且输出char型变量时,也不会进行转化;这样就欺骗了<<操作符,让我们可以以char的形式输出一个数,而不用ASCII转换。实际代码如下:
ofstream file("E:/BaiduYunDownload/data.txt" ,ios_base::binary|ios_base::trunc);
double a[4]={16.7,2.4,42.3,56.7};
int i;
if(!file.good())
{
printf("Cannot open the file\n" );
return 0;
}
for(i=0;i<sizeof (a);i++){
file<<((char *)a)[i];
}
- 另外一种方法是write函数,理论是一样的,都是依靠强制转换为char型变量以避免ASCII转换
C++输出二进制文件和文本文件的更多相关文章
- MapReduce:输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的平均值,且整数不保留小数,小数保留两位小数点
有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入. 表格如下: 姓名 一月 二月 三月 楚乔 200 314 3500 宇文玥 2000 332 ...
- linux下将编译错误输出到一个文本文件
linux下将编译错误输出到一个文本文件 command > filename 把把标准输出重定向到一个新文件中 command > > filename 把把标准输出重定向到一个文 ...
- 【转】 Linux中记录终端输出到txt文本文件
转载: http://blog.csdn.net/tengh/article/details/41823883 一,把命令运行的结果保存到文件当中:用 > 把输出转向就可以了 例子: $ ls ...
- delphi 文件的读取(二进制文件和文本文件)
http://blog.csdn.net/earbao/article/details/9174033
- C# 输出字符串到文本文件中
写个博客记录下,方便以后使用: public class WriteHelper { public static void WriteFile(object data) { try { string ...
- python使用pickle序列化对象读取输出二进制文件
import pickle class tick: name = '牛牛牛' age = 10 samp = [1,2,3,'aaa',[12,3],tick()] with open('te.xxx ...
- 【c的文件操作】文本文件和二进制文件(内存映像)的不同 文件结尾判断feof , EOF
查看 stdio.h 可以看到如下定义: #define EOF (-1) #define _IOEOF 0x0010 #define feof(_stream) ((_stream)- ...
- 如何将cmd中命令输出保存为TXT文本文件
在使用Windows 中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果保存起来, 但是用复制的方法过于麻烦:有时输出数据条数过大,会造成内容自动滚出屏幕,无法阅读,我们可将命令运行的结果 ...
- Eclipse \ MyEclipse \Scala IDEA for Eclipse里如何将控制台console输出的过程记录全程保存到指定的文本文件(图文详解)
不多说,直接上干货! 问题详情 运行Java程序的时候,控制台输出过多,或者同时运行多个Java程序,输出结果一闪而过的时候,可以考虑将将控制台输出,改为输出到文本文件.无须修改Java代码,引入流这 ...
随机推荐
- Linux第八讲随笔 -tar / 系统启动流程
linux 第八讲1.tar 参考 作用:压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的. 语法:tar[必要参数][选择参数][文件] 参数:必要参数有如下: -A 新增压缩文件到 ...
- 中文代码示例之Angular入门教程尝试
原址: https://zhuanlan.zhihu.com/p/30853705 原文: 中文代码示例教程之Angular尝试 为了检验中文命名在Angular中的支持程度, 把Angular官方入 ...
- KVO键值观察的具体实现
1.KVO简介 KVO是Objective-C对观察者设计模式的一种实现,它提供一种机制,指定一个被观察对象(如A类),当对象中的某个属性发生变化的时候,对象就会接收到通知,并作出相应的处理.在MVC ...
- Numpy
一 : 安装ipython以及用到的包介绍 # 这里我们会用到ipython解释器,本文代码在ipython下运行 Pip3 install ipython Pip3 install jupyter ...
- 如何使用MOQ进行单元测试
使用MOQ来伪装和隔离被依赖对象,从而提高被测对象的测试效果. 安装 通过http://code.google.com/p/moq可以下载MOQ的最新版本.在SSL项目中,我们使用的是MOQ 3.1. ...
- Android Ptrace Inject
之前介绍了Android平台上3种常见的hook方法,而hook的前提是进程注入,通过进程注入我们可以将模块或代码注入到目标进程中以便对其空间内的数据进行操作,本篇文章介绍基于ptrace函数的注入技 ...
- Java框架之Spring(五)
本文主要介绍Spring中, 1 Spring JDBC 2 使用注解方式管理事务的传播行为 3 采用XML 方式配置事务 4 SH 整合 5 SSH 整合 一.Spring JDBC 1) 导包 , ...
- 删除链表中间节点和a/b处的节点
[题目]: 给定链表的头节点 head,实现删除链表的中间节点的函数. 例如: 步删除任何节点: 1->2,删除节点1: 1->2->3,删除节点2: 1->2->3-& ...
- unity3d ipv6支持
unity游戏应用提交app stroe需要通过ipv6测试,但是unity本身我没找到可用的接口,所以使用ios插件来处理. 插件的IOSNativeNet.h和IOSNativeNet.m代码: ...
- windows 安全模型简介
操作系统中有些资源是不能由用户代码直接访问的,比如线程进程,文件等等,这些资源必须由系统级代码由RING3层进入到RING0层操作,并且返回一些标识供用户程序使用,一般调用某个函数陷入到内核,这样的函 ...