void print_data(const char* data, int data_len)
{
int i, j;
unsigned int offset = 0;
int total_row = data_len / 16;
int left_data_len = data_len % 16;
/* print data_len / 16 */
for (j = 0; j < total_row; j++)
{
printf("# %08X ", offset);
for (i = 0; i < 16; i++)
{
printf("%02X ", data[j*16+i]);
}
for (i = 0; i < 16; i++)
{
if ((data[j*16+i] < 0x20) || (data[j*16+i] > 0x7F))
{
printf(".");
}
else
{
printf("%c", data[j*16+i]);
}
}
offset += 16;
printf("\n");
}
/* print data_len % 16 */
if (left_data_len > 0)
{
printf("# %08X ", offset);
for (i = 0; i < left_data_len; i++)
{
printf("%02X ", data[total_row*16+i]);
}
for (i = 0; i < 16 - left_data_len; i++)
{
printf(" ");
}
for (i = 0; i < left_data_len; i++)
{
if ((data[total_row*16+i] < 0x20) || (data[total_row*16+i] > 0x7F))
{
printf(".");
}
else
{
printf("%c", data[j*16+i]);
}
}
printf("\n");
}
return;
} /* print_data */