|
はじめまして、16進ダンプを取るプログラムで悩んでおります。
実現したいことは、64バイト分のバッファを16進コードに変換する
ことです。
バッファの内容が64バイト未満の場合は不足分を0x00で埋めます。
以下のサンプルは稚拙で大変お恥ずかしいのですが、まず初めに
気づくのが先頭の'\0'(0x00)が後ろのコードと結びつき、意図した
0x00 と異なる表示がされてしまいます。
もう一つの問題点として、途中からおかしな表示となってしまいます。
よろしく、お願いいたします。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void CharToHex(char *s1,char *s2,size_t n){
char *p=s1,*s=s2;
char tempBuff[16];
int inc=0;
while(n>0){
memset(tempBuff,'\0',16);
inc=sprintf(tempBuff,"%02d:%02X:%c ",64-n,(*s)&0xff,*s);
printf("%02d:%02X:%c ",64-n,(unsigned char)(*s)&0xff,*s);
strncat(p,tempBuff,inc);
s++;
p=p+inc;
n--;
}
}
void main(int argc,char *argv[]){
char logBuff[]="\00123456789\t\n0123456789\00123456789";
char binBuff1[256];
char binBuff2[256];
memset(binBuff1,'\0',256);
memset(binBuff2,'\0',256);
memcpy(binBuff1,logBuff,64);
CharToHex(binBuff2,binBuff1,64);
// printf("[%s]\n",binBuff2);
exit(0);
}
|