C言語でバイナリダンプ
http://homepage1.nifty.com/~tetsu/ruby/cmd/hd.htmlを参考に、C言語でバイナリダンプする関数を書いてみました。
ファイル: hd.c
#include <stdio.h> #include <ctype.h> void hd(const char *data, size_t len) { char str[17]; int r16, padlen; size_t i; for (i = 0, r16 = 0; i < len; i++, r16 = i % 16) { if (r16 == 0) printf("%08x ", i); if (i % 4 == 0) printf(" "); printf("%02x", data[i]); str[r16] = isprint(data[i]) ? data[i] : '.'; if (r16 == 15) { str[16] = '\0'; printf(" %s\n", str); } } if (r16 != 0) { str[r16] = '\0'; padlen = (16 - r16) * 2 + (16 - r16) / 4 + 1; printf("%*c %s\n", padlen, ' ', str); } } int main(int argc, char *argv[]) { int i; for (i = 1; i < argc; i++) { hd(argv[i], strlen(argv[i])); } return 0; }
ファイル: Makefile
PROG=hd MAN= .include <bsd.prog.mk>
実行例:
$ make $ ./hd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1234 00000000 61616161 61616161 61616161 61616161 aaaaaaaaaaaaaaaa 00000010 61616161 61616161 61616161 61613132 aaaaaaaaaaaaaa12 00000020 3334 34