본문 바로가기
코스웨어/13년 스마트컨트롤러

Hexa viewer 과제 - 변준식

by 알 수 없는 사용자 2013. 5. 3.
728x90
반응형

 

 

hexa_view.c

#include <stdio.h>

void display(void);

int main(int argc, char** argv)
{  
  FILE *fp;
  unsigned char RData[512]={0};
  unsigned char ch;
  unsigned int i;
  unsigned int j;
  unsigned char k;

  if(argc!=2)
  {
    printf("Command parameter not correct!\n");
    return 1;
  }
  else if((fp=fopen(argv[1], "r"))==NULL)
  {
    printf("Can not open file %s\n", argv[1]);
    return 1;
  }
  else
  {

    while(!feof(fp))
    {
      for(i=0;i<512;++i)
      {
        ch=getc(fp);
        RData[i]=ch;
        if(RData[i]==EOF)
        {
          break;
        }
      }

      display();

      for(i=0;i<512;i=i+16)  
      {
        printf("%08X ", RData+i);

        for(j=0+i;j<16+i;++j)
        {  
          if(RData[j]==EOF)
          {
            for(k=0;k<(16-(j%16));++k)
            {
              printf("   ");
            }
            break;
          }
          
          printf("%02X ", RData[j]);
        }  

        for(j=0+i; j<16+i; ++j)
        {
          if(RData[j]==EOF)
          {
            return 1;
          }
          if(0==RData[j])
          {  
            printf(".");
          }
          else if(RData[j]<32)
          {
            printf(".");
          }
          else if(RData[j]>127)
          {
              printf(".");
          }
          else
          {
            printf("%c",  RData[j]);
          }  
        }

      printf("Press any key......");
      putchar('\n');
      }
      getchar();
    }
  }
  fclose(fp);

  return 0;
}  

void display(void)
{
  unsigned char ucCnt;

  printf("---------------------------------------"
       "----------------------------------\n");
  printf("address                     Hexa                              ASCII\n");
  printf("         ");

  for(ucCnt=0; ucCnt<=15; ucCnt= ucCnt +1)
  {
    printf("%02X ", ucCnt);
  }
  putchar('\n');
      
  printf("---------------------------------------"
       "----------------------------------\n");

  return;
  
}

728x90