Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // by petter wahlman, www.twitter.com/badeip
- #ifndef HEX_H
- #define HEX_H
- #include <ctype.h>
- void print_hex(void *data, size_t len, unsigned int flag);
- //---[ flags: ]----------------------------------------------------------------
- // hex output flags:
- #define HEX_SKIP_ASCII 1
- #define HEX_SKIP_WS 2
- #define HEX_SKIP_TAB 4
- #define HEX_SKIP_NL 8
- #define HEX_SKIP_OFFSET 16
- #define HEX_SKIP_HEX 32
- //---[ macros: ]----------------------------------------------------------------
- #define TOI(a) (a[0]<<24|a[1]<<16|a[2]<<8|a[3])
- #define TOA(w) { \
- char *c = (char *)&w; \
- if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) \
- printf("%c%c%c%c\n", c[3], c[2], c[1], c[0]); \
- }
- #define TOX(s, bufsize, buf) \
- { \
- int i; \
- int slen = strlen(s); \
- for (i = 0; (i < slen) && (i < (bufsize << 1)); i++) { \
- s[i] |= 0x20; \
- if (s[i] >= '0' && (s[i] <= '9')) \
- s[i] -= '0'; \
- else \
- s[i] -= 87; \
- if (i % 2) \
- buf[i >> 1] |= s[i]; \
- else \
- buf[i >> 1] = s[i] << 4; \
- } \
- }
- #define print_hex(data, len, flag) \
- do { \
- unsigned char *in = (unsigned char *)data; \
- int i, j; \
- \
- if (!(flag & HEX_SKIP_TAB)) \
- printf("\t"); \
- \
- i = 0; \
- while (i < len) { \
- if (!(flag & HEX_SKIP_OFFSET)) \
- printf("%02x: ", i); \
- \
- if (!(flag & HEX_SKIP_HEX)) { \
- for (j = 0; j < 16 && i + j < len; j++) { \
- printf("%02x", in[i + j]); \
- if (!(flag & HEX_SKIP_WS)) \
- printf(" "); \
- } \
- \
- while (j++ < 16) \
- printf(" "); \
- } \
- \
- if (!(flag & HEX_SKIP_ASCII)) { \
- if (!(flag & HEX_SKIP_HEX)) \
- printf("| "); \
- for (j = 0; j < 16 && i + j < len; j++) \
- printf("%c", isprint(in[i + j]) ? in[i + j] : '.'); \
- } \
- i += 16; \
- if (!(flag & HEX_SKIP_NL)) \
- printf("\n"); \
- \
- if (!(flag & HEX_SKIP_TAB)) \
- printf("\t"); \
- } \
- \
- printf("\n"); \
- } while(0)
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement