/* hexview.c * by Chris Williams * prints out the hex values of the contents of stdin * use more or less to page the output * usage: * hexview [starting_address] [< file] */ #include #include #include int main(int argc, char *argv[]) { int c, byte = 0, done = 0; unsigned int address = 0; unsigned char row[16]; if (argc > 1) address = strtoul(argv[1], (char **)NULL, 0); do { c = getchar(); if (feof(stdin)) done = 1; else row[byte] = c; if ((done && byte != 0) || ++byte == 16) /* end of row or end of file */ { int i; for (i = byte; i < 16; ++i) row[i] = 0; /* Clear remaining bytes */ printf("%04X:", address>>16&0xFFFF); printf("%04X", address&0xFFFF); for (i = 0; i < 8; ++i) printf(" %02X", row[i]); printf("-"); for (i = 8; i < 16; ++i) printf("%02X ", row[i]); for (i = 0; i < byte; ++i) putchar(isprint(row[i])?row[i]:'.'); putchar('\n'); byte = 0; address += 16; } } while (!done); return 0; }