C言語関係掲示板

過去ログ

No.583.文字列を2桁の16進数で表示するプログラム

[戻る] [ホームページ]
No.5442

文字列の16進数表示
投稿者---けんじ(2003/03/04 22:22:18)


文字列を入力し、各文字を2桁の16進数で表示するプログラム。
文字列が "ABCDEFG 1234567890 HIJKLMN" であったなら、次のように表示する。

位置 16進数表示 文字のまま表示
000000 41424344454647203132333435363738 |ABCDEFG12345678|
000010 39302048494A4B4C4D4E00 |90 HIJKLMN.|

#include <stdio.h>
#include <ctype.h>

int dump(char *name);
int main(void)
{
	char name[40];
	printf("ファイル名を入力してください:");
	scanf("%",name);
	dump(name);
	return 0;
}
int dump(char *fname)
{
	FILE *fp;
	unsigned char a[17];
	int kazu, j;
	int i = 0;
	
	fp = fopen( fname, "rb");
	if ( fp == NULL ){
		printf("%s ファイルをオープンできません\n",fname);
		return -1;
	}
	
	while (( kazu = fread (a,1,16,fp)) !=0){
		printf("%05x :",i);
		for (j=0;j<kazu;j++){
			printf("%02x ",a[j]);
			if (isprint(a[j])==0)a[j]='.';
		}
		a[kazu]='\0';
		printf(" %s\n",a);
		i+=16;
	}
	
	fclose(fp);
	return 0;
}


このプログラムをファイルから読み込むんじゃなくて
文字列を入力して変換するという形にしたいのですが
どうすればいいのでしょうかどなたかよろしくお願いします。


No.5455

Re:文字列の16進数表示
投稿者---a" (2003/03/05 08:13:57)


int main(){
    char c[64]="",cpy[17]="",*p=0;
    int i,k,m,j;
    scanf("%s",c);
    m=strlen(&c[0]);
    for(i=k=0;i<=m/16;i++,k+=16){
        for(j=0,p=cpy;j<16;j++)
            *p++ = c[k+j] ? c[k+j] : '0';
        *p=0;
        printf("%05x| %02x %02x %02x %02x %02x %02x %02x %02x     %02x %02x %02x %02x %02x %02x %02x %02x  | %-16s\n",
               i*0x10,c[k] ,c[k+1],c[k+2],c[k+3],c[k+4],c[k+5],c[k+6],c[k+7],c[k+8],c[k+9],c[k+10],c[k+11],c[k+12],c[k+13],c[k+14],c[k+15],cpy);
    }
    
    return 0;
}