帶領學生學二進制文件操作,要觀察文件中的內容,用記事本不爽,二進制文件根本就不是記事的“業務范圍”
用EditPlus的HexView可以看,如圖:
在我當學生的時候,這個活計是用DOS下的外部命令Debug干的,如下圖,進入DOS方式,轉到你要顯示文件的目錄下,debug 文件名,接下來按圖實施:
其實在學習了二進制文件操作後,將每一個文件都當作二制文件,以每16字節為一個讀取單位將文件讀出來再顯示,就是這個效果,可以編寫出下面的程序:
[cpp]
#include<iostream>
#include<iomanip>
#include <fstream>
#include<cstdlib>
using namespace std;
int main( )
{
char c[16];
char f[100];
cout<<"請輸入文件名:";
cin>>f;
ifstream infile(f,ios::in|ios::binary);
if(!infile)
{
cerr<<"open error!";
exit(1);
}
while(!infile.eof())
{
infile.read(c,16);
if(!infile.eof())
{
for(int i=0; i<16; ++i)
cout<<setfill('0')<<setw(2)<<hex<<int((unsigned char)(c[i]))<<" ";
cout<<'\t';
for(int i=0; i<16; ++i)
cout<<(c[i]?c[i]:'.');
cout<<endl;
}
}
return 0;
}
#include<iostream>
#include<iomanip>
#include <fstream>
#include<cstdlib>
using namespace std;
int main( )
{
char c[16];
char f[100];
cout<<"請輸入文件名:";
cin>>f;
ifstream infile(f,ios::in|ios::binary);
if(!infile)
{
cerr<<"open error!";
exit(1);
}
while(!infile.eof())
{
infile.read(c,16);
if(!infile.eof())
{
for(int i=0; i<16; ++i)
cout<<setfill('0')<<setw(2)<<hex<<int((unsigned char)(c[i]))<<" ";
cout<<'\t';
for(int i=0; i<16; ++i)
cout<<(c[i]?c[i]:'.');
cout<<endl;
}
}
return 0;
}
運行結果與上面兩個的結果是一樣的:
實際上,大一的同學要知道,和賀老師學習了兩個學期的C++,你已經能做不少的事情了。聯想第16周用ASCII文件做過的IDE中對代碼加注釋、整理格式之類的功能,是不是這樣?
在編程中發現一些可以做的事情,不妨做一做,就知道自己已經“能”了。