본문 바로가기

C언어/과제

불러온 파일 Hexacode 보여주기

#include <stdio.h>
#include <stdlib.h>

#define   LEN  16

int main(int iParam, char *cpParam[])
{
  int   iCnt=0;
  int   iCnt2=0;
  FILE  *stFile;
  char  cBuf;
  char  caStr[LEN+1]="";  // NULL초기화 17개 

  if(2 != iParam)
  {  // 인자 검사 2개가 아니면 종료!
    fprintf(stdout, "파일 이름을 쓰세요\n");
    return 0;
  }

  stFile = fopen(cpParam[1], "rb");  // 2진모드로 읽기!
  if(0 == stFile)
  {  // 못열경우 실행!!
    fprintf(stdout, "[%s]파일을 찾을 수 없습니다\n", cpParam[1]);
    return 0;
  }
  printf("┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┓\n");
  printf("┃  ADDR  ┃00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ┃0123456789ABCDEF┃\n");
  printf("┣━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━┫\n");

  while((cBuf=fgetc(stFile)) != EOF)
  {  // 헥사 뷰 시작~~~ 32이하는 .으로 표시!
    if(0 == iCnt)
    {
      printf("┃%08X┃", iCnt2++);
    }
    printf("%02X ", (unsigned char)cBuf);
    if(cBuf <= 31)
    {
      caStr[iCnt++]='.';
    }
    else
    {
      caStr[iCnt++]=cBuf;
    }
    if(iCnt >= LEN)
    {
      caStr[iCnt]='\0';
      printf("┃%s┃\n", caStr);
      iCnt=0;
    }
  }
  if((0<iCnt)&&(16>=iCnt))
  {
    while(LEN>iCnt)
    {
      printf("   ");
      caStr[iCnt++]=' ';
    }
  printf("┃%s┃", caStr);
  }
  printf("\n┗━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━┛\n"); 

  fclose(stFile);
  return 0;
}

'C언어 > 과제' 카테고리의 다른 글

C언어 과제 11  (0) 2010.10.27
C언어 과제 10  (0) 2010.10.27
C언어 과제 09  (0) 2010.10.25
C언어 과제 08  (0) 2010.10.25
C언어 도전과제 01 (소수와 합성수를 판단하여라)  (0) 2010.10.20