针对2进制写代码前需要明确
1.要有这样的思想:打开文件,读写文件,关闭文件。
2.打开文件 流类 对象名 (文件名,方式)还有种(下面代码可知)。
3.写文件:设对象名为 f ( 例如ifstream f ),则
f.write((char*)&i,sizeof (int))<——这是固定格式,记住。还有(char*)&i是强制类型转换。
读文件:
f.read((char*)&i,sizeof(int))
4.读写文件时,指针一定要黏在一起:读指针黏读文件,写指针要黏写文件
例如:f,seekg(long(sizeof (int )*i));
f.read((char*)&i,sizeof(int));
最好画出指针在图的位置,read从seekg指针读前sizeof(int)位,write从seekp指针读后sizeof(int)位。
5.关闭文件。f.close().
#include<fstream>//要声明头文件
#include<iostream>
using namespace std;
int main()
{int i,j;
fstream f;//建立文件,开通道.
f.open("d:\\data.dat",ios::out|ios::binary);//写方式打开文件
for(i=1;i<=10;i++)//循环
f.write((char*)&i,sizeof (int))//写入i的值,有内存流入文件。
f.close();//关闭文件
//下面要修改文件了
f.open("d:\\data.dat",ios::out|ios::in|ios::binary) ; //要先打开文件(以读写的方式打开)
for(i=0;i<10;i++)
{f.skeeg(long(sizeof(int)*i)) ; //从流开始位置开始,后移sizeof(int)*i 位
f.read((char*)&j,sizeof(int)) ; //从文件读出(向前读)sizeof(int)位并写入内存中的变量j
if (j%2) //若j为奇数
{j+=10;
f.seekp(-long(sizeof(int)),ios::cur);//从当前的位置开始,向前移动**位(现在是在文件)
f.write((char*)&j,sizeof(int)); //写入修改后的数据到文件中
}
}
f.seekg(long(sizeof(int)*10));//把流指针移到文件尾
for(i=91;i<=95;i++) //添加五个数据
f.write((char*)&j,sizeof(int));//把i的值写入文件
//下面是吧文件的数据输出到显示器,要用到cout
f.seekg(0,ios::beg) // 流指针指向文件头,其实ios::beg可省略
for(i=0;i<15;i++) //遍历
{f.read((char*)&j,sizeof(int));
cout<<j<<" ";//在显示器显示j的值;
}
cout<<endl;
f.close();//关闭文件
}
运行结果
11 2 13 4 15 6 17 8 19 10 91 92 93 94 95