c
1#include <stdio.h> 2#include <ctype.h> 3 4int main(void) 5{ 6 int n; 7 unsigned char buf[16]; 8 FILE *fp; 9 char fname[64]; 10 11 printf("ファイル名:"); 12 scanf("%s", fname); 13 14 if((fp = fopen(fname, "rb")) == NULL) 15 printf("ファイルを開けません。\n"); 16 else { 17 unsigned long count = 0; 18 while((n = fread(buf, 1, 16, fp)) > 0) { 19 int i; 20 21 printf("%08lx", count); //うまくいかない 22 23 for(i = 0; i < n; i++) 24 printf("%02x ", (unsigned)buf[i]); 25 26 if(n < 16) 27 for(i = n; i < 16; i++) printf(" "); 28 for(i = 0; i < n; i++) 29 putchar(isprint(buf[i]) ? buf[i] : '.'); 30 31 putchar('\n'); 32 33 count += 16; 34 } 35 fclose(fp); 36 } 37 38 return 0; 39} 40 41 42
count変数は,
0, 16, 32, 48という風に増えていくので、それを%8lxで変換した値、つまり
00000000
00000010
00000020
というように増えていくはずなのですが、
同ファイルを実行してみると、
0000000023 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e #include <stdio.
0000001068 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 h>.#include <cty
0000002070 65 2e 68 3e 0a 0a 69 6e 74 20 6d 61 69 6e 28 pe.h>..int main(
0000003076 6f 69 64 29 0a 7b 0a 09 69 6e 74 20 6e 3b 0a void).{..int n;.
0000004009
という風に不規則な16進数が表示されてしまいます。
何故でしょうか。
回答2件
あなたの回答
tips
プレビュー