一直以来对文本文件与二进制文件分不清,最近看了看别人写的和课本上说的,自己试了试,做一下总结。
文本文件处理的字符流,在文件中存储的是字符的ascii码,这种模式编码是定长的,每8位一个字节,一个字节对应一个字符;二进制文件处理的是字节流,是按数据在内存中的形式原样保存在硬盘上产生的,二进制文件的编码是变长的。具体就是字符存放对应的ascii码,整数存放的是对应的四字节补码(本人用的是win7_64,VS2010,整数即int类型在vs2010中是四字节,正数反码与源码一致负数存放的是对应的补码),整数可由win7自带的计算器得出:打开后按快捷键alt+3,可以输入正负数下面显示的就是对应的补码(小数貌似不行)。浮点数存放的是符号位阶数尾数,是按ieee754标准存储的。单精度浮点数4字节,双精度8字节。
文本文件处理的字符流,在文件中存储的是字符的ascii码,这种模式编码是定长的,每8位一个字节,一个字节对应一个字符;二进制文件处理的是字节流,是按数据在内存中的形式原样保存在硬盘上产生的,二进制文件的编码是变长的。具体就是字符存放对应的ascii码,整数存放的是对应的四字节补码(本人用的是win7_64,VS2010,整数即int类型在vs2010中是四字节,正数反码与源码一致负数存放的是对应的补码),整数可由win7自带的计算器得出:打开后按快捷键alt+3,可以输入正负数下面显示的就是对应的补码(小数貌似不行)。浮点数存放的是符号位阶数尾数,是按ieee754标准存储的。单精度浮点数4字节,双精度8字节。
还有一个重要的地方,文本文件中回车、换行符(0DH,0AH)被处理成字符‘\n'(0AH),输出流中字符‘\n'(0AH)会被转换成回车和换行两个字符;二进制文件不会进行这种处理。
// textandbinary.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<fstream>
int _tmain(void)
{
int i=-300;
std::fstream fp;
float fnum1=1.25;
double d_num2=-120.5;
fp.open("test.bin",std::ios::out|std::ios::in|std::ios::binary);
fp.write((char*)