2010년/5월
5월28일(비트맵뷰어회전)C++(hexaviewer c++로 변환
뽀얀햄스터
2010. 5. 28. 08:45
P587;
=========================================================================
=========================================================================
C++
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <iostream>
#include <io.h>
using namespace std;
#define MAX_FILE_SIZE 1400
void HesaView(void *vp,int iSize)
{
int iCnt;
int iHexnum=0;
cout.setf(ios::uppercase); //대문자로 출력
if(0==vp)
{
return;
}
if(MAX_FILE_SIZE<iSize)
{
iSize=MAX_FILE_SIZE;
}
cout<<" _ADDRESS_ ";
for(iCnt = 0;16 > iCnt ; ++iCnt)
{
cout.width(3);
cout<<hex<<iCnt;
}
cout.width(3);
for(iCnt = 0;16 > iCnt ; ++iCnt)
{
cout<<hex<<iCnt;
}
cout<<endl;
for(iCnt = 0; 13* 6>iCnt ; ++iCnt)
{
cout<<"-";
}
cout<<endl;
while(iHexnum<1400)
{
iCnt = iHexnum;
cout<<"0x";
cout.width(8);
cout.fill('0');
cout<<iCnt;
//"0x%08x "
cout.fill(' ');
cout<<" ";
while(iHexnum+16>iCnt)
{
cout.width(2);
cout.fill('0');
int a=*(((unsigned char*)vp)+iCnt);
cout<<a<<" ";
iCnt++;
}
cout.fill(' ');
cout.width(2);
for(iCnt = iCnt - 16;(iHexnum+16)>iCnt; ++iCnt)
{
if(
( 32 >= (*(((unsigned char*)vp) + iCnt))) ||
( 127 <= (*(((unsigned char*)vp) + iCnt))) )
{
cout<<".";
}
else
{
cout<<*(((unsigned char*)vp)+iCnt);
}
}
cout<<endl;
iHexnum+= 16;
}
}
int main(int iArg,char *capArg[])
{
int iFileDS;
int iRet;
unsigned char *ucpData=0;
struct stat stFileInfo;
if(2 != iArg)
{
cout<<"잘못입력하셨습니다.."<<endl;
return 0;
}
iFileDS=open(capArg[1],O_RDONLY|O_BINARY);
if(0 >iFileDS)
{
cout<<"파일을 찾을 수 없읍니다."<<endl;
return 0;
}
iRet=fstat(iFileDS,&stFileInfo);
if(0>iRet)
{
cout<<"파일 정보를 읽어 들일 수 없읍니다"<<endl;
close(iFileDS);
return 0;
}
else
{
iRet=stFileInfo.st_size;
}
if(MAX_FILE_SIZE<iRet)
{
iRet=MAX_FILE_SIZE;
}
ucpData=(unsigned char*)malloc(iRet);
if(0==ucpData)
{
cout<<"메모리 공간이 부족합니다..\n";
close(iFileDS);
return 0;
}
iRet=read(iFileDS,ucpData,iRet);
close(iFileDS);
if(0>iRet)
{
cout<<"파일을 읽을 수 없읍니다.\n";
close(iFileDS);
free(ucpData);
return 0;
}
HesaView(ucpData,iRet);
free(ucpData);
close(iFileDS);
return 0;
}