// 주어진 크기만큼 공백을 삽입한다.
static void Blank(int n)
{
int k = 16-n;
k = k*3 + (n<7?1:0);
for(int i=0; i<k; i++)
printf(" ");
}
// 바이너리 데이터를 정규 포멧으로 출력한다.
void PrintBinary(BYTE* buffer, int length)
{
int row = length/16;
int col = length%16;
int i, j;
int prev = 0;
for(i=0; i<=row; i++)
{
int end = 16;
if(i == row)
end = col;
else
end = 16;
printf("%06X ", i*16);
for(j=0; j<end; j++)
{
printf("%02X ", buffer[i*16+j]);
if(j==7)
printf(" ");
}
Blank(end);
printf(" ");
for(j=0; j<end; j++)
{
char ch = buffer[i*16+j];
char ch1 = buffer[i*16+j+1];
if(isprint(ch))
printf("%c", ch);
else
{
if((ch >> 7) & 0x01 == 1 && (ch1 >> 7) & 0x01 == 0 && prev == 0)
{
printf("%c", ch);
prev = 1;
}
else
{
if(prev == 1)
{
printf("%c", ch);
prev = 0;
}
else
printf(".");
}
}
if(j==7)
printf(" ");
}
printf("\n");
}
}
// 바이트 데이터를 이진수 문자열로 출력한다.
void PrintByte(BYTE ch)
{
for(int i=0; i<8; i++)
printf("%c", (ch>>(7-i)&0x01)?'1':'0');
static void Blank(int n)
{
int k = 16-n;
k = k*3 + (n<7?1:0);
for(int i=0; i<k; i++)
printf(" ");
}
// 바이너리 데이터를 정규 포멧으로 출력한다.
void PrintBinary(BYTE* buffer, int length)
{
int row = length/16;
int col = length%16;
int i, j;
int prev = 0;
for(i=0; i<=row; i++)
{
int end = 16;
if(i == row)
end = col;
else
end = 16;
printf("%06X ", i*16);
for(j=0; j<end; j++)
{
printf("%02X ", buffer[i*16+j]);
if(j==7)
printf(" ");
}
Blank(end);
printf(" ");
for(j=0; j<end; j++)
{
char ch = buffer[i*16+j];
char ch1 = buffer[i*16+j+1];
if(isprint(ch))
printf("%c", ch);
else
{
if((ch >> 7) & 0x01 == 1 && (ch1 >> 7) & 0x01 == 0 && prev == 0)
{
printf("%c", ch);
prev = 1;
}
else
{
if(prev == 1)
{
printf("%c", ch);
prev = 0;
}
else
printf(".");
}
}
if(j==7)
printf(" ");
}
printf("\n");
}
}
// 바이트 데이터를 이진수 문자열로 출력한다.
void PrintByte(BYTE ch)
{
for(int i=0; i<8; i++)
printf("%c", (ch>>(7-i)&0x01)?'1':'0');