Hexダンプ

Hexダンプライブラリ
指定された領域の指定された長さ分のデータを
Hexダンプする。合わせASCII表示も行う。
出力先は標準出力

//-----------------------------------------
void yydump(char *p, int length)
{
int address = (int)p;
char data[17];
int i;
char buf[128];
char tmp[32];

 data[16] = 0; /* for string terminator */

 printf("Start Addr:[%p] Length:[%d]\n", p, length);

 for(;length>0;){
   sprintf(buf, "%08X :", address);

   for(i=0;i<16;i++){
     data[i] = *p++;	
     length--;

     /* data is out of range */
     if(length < 0){
       sprintf(tmp, "  ");
       strcat(buf, tmp);
       data[i] = ' ';
     }
     else{
       sprintf(tmp, "%02X", (unsigned char)data[i]);
       strcat(buf, tmp);
       /* eliminate undisplayable character */
       if((data[i] < 0x20) || (0x7E < data[i])){
	 data[i] = '.';
       }
     }
   }
   sprintf(tmp, " :  %s\n", data);
   strcat(buf, tmp);
   address += 16;

   printf("%s",buf);
 }
 printf("\n");
}