程序在2楼附件
代码:
#include <cstdlib>
#include <iostream>
#include <windows.h>
//#include <winnt.h>
using namespace std;
bool bQuit;
FILE * fp;
void ShowHelpInfo();
void GetCommand(char * commands);
void CheckCommand(char * commands);
bool GetOpenFileHandle(char * path);
bool ShowFileHexData(int lowrange,int highrange);
void show(unsigned char * showdata,int cha,long lowrange);
int main(int argc, char *argv[])
{
char compt[10];
char command[100];
fp=0;
//sprintf("-",compt);
bQuit=1;
ShowHelpInfo();
// show();system("PAUSE");
while (bQuit)
{
printf("-");
scanf("%c",command);
CheckCommand(command);
}
// system("PAUSE");
return EXIT_SUCCESS;
}
void ShowHelpInfo()
{
char showstr[]="File Hex for Dos Version write by Chjshen.\n 2009-05-21\n\n";
printf(showstr);
printf("Open -f [filename] |open Filename file.\n");
printf("Show -s [range] |show hex data. \n");
printf("Quit -q |quit.\n");
printf("Hex -h Hex1 hex2 |Hex1+Hex2 and Hex1-Hex2 or Hex2-Hex1.\n");
printf("Help -? |help information.\n");
printf("\nFor Example:\n -f notepad.exe \n -s 100 15f \n -h 10 12 \n");
}
void CheckCommand(char * commands)
{
char command;
char hexresultstr[100];
char path[MAX_PATH];
int hex1,hex2;
int lowrange,highrange;
command=commands[0];
switch (toupper(command))
{
case 'F':
scanf("%s",path);
if (GetOpenFileHandle(path))
printf("Now \"%s\" is opened.",path);
fflush(stdin);
break;
case 'E':
case 'Q':
if (fp!=0)
fclose(fp);
printf("quit.");
bQuit=0;
fflush(stdin);
break;
case 'S':
scanf("%x %x",&lowrange,&highrange);
ShowFileHexData(lowrange,highrange);
//printf("Show hex data.");
fflush(stdin);
break;
case 'H':
scanf("%X %X",&hex1,&hex2);
sprintf(hexresultstr,"%04X %04X",hex1+hex2,hex1>=hex2?hex1-hex2:hex2-hex1);
printf(hexresultstr);
fflush(stdin);
break;
case '?':
ShowHelpInfo();
fflush(stdin);
break;
case 10:
fflush(stdin);
break;
default:
fflush(stdin);
printf("Error command line.");
}
printf("\n");
}
bool GetOpenFileHandle(char * path)
{
if (strlen(path)==0)
{
scanf("%s",path);
}
if (fp!=0)
{
fclose(fp);
}
fp=fopen(path,"rb");
if (fp==0)
{
printf("Open File Error,please check your enter's filename is vaild.");
}
else
{
return true;
}
return 0;
}
bool ShowFileHexData(int lowrange,int highrange)
{
long temlength=0;
if (fp==0)
{
printf("No file opened,please open file that you wanted to show hex data.");
return 0;
}
long length;
fseek(fp,0,SEEK_END);
length=ftell(fp);
if (highrange>length||lowrange>length)
{
printf("over file length.");
return 0;
}
if (lowrange>=highrange)
{
printf("Range error,please enter correct hex number.");
return 0;
}
printf("%X~%X Hex Data:\n",lowrange,highrange);
// printf("%02X",readdata);
int totall=lowrange;
int i;
int cha=highrange-lowrange;
i=0;
unsigned char * temdata=(unsigned char*)malloc(cha+1);
fseek(fp,lowrange,SEEK_SET);
fread(temdata,sizeof(unsigned char),cha+1,fp);
cha++;
show(temdata,cha,lowrange);
free(temdata);
return 1;
}
void show(unsigned char * showdata,int cha,long lowrange)
{
int j,i;
i=0;
char readdata[100]="";
j=0;
char asii[20]="";
while (j<=(int)cha/16)
{
i=0;
sprintf(readdata,"");
sprintf(asii,"");
printf("\n%08X:",lowrange+j*16);
do
{
if (j*16+i<cha)
{
if (i%16==8)
printf("-");
else
printf(" ");
printf("%02X",showdata[j*16+i]);
if (showdata[j*16+i]<33||showdata[j*16+i]>127)
{
if (showdata[j*16+i]=='\0')
{
sprintf(asii+strlen(asii)," ");
}
else
{
sprintf(asii+strlen(asii)," ");
}
}
else
{
sprintf(asii+strlen(asii),"%c",showdata[j*16+i]);
}
}
else
{
printf(" ");
sprintf(asii+strlen(asii)," ");
}
i++;
}
while (i<16);
printf(" %s",asii);
j++;
}
}