Advertisement
badeip

hex.h

Nov 28th, 2011
521
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.01 KB | None | 0 0
  1. // by petter wahlman, www.twitter.com/badeip
  2. #ifndef HEX_H
  3. #define HEX_H
  4. #include <ctype.h>
  5.  
  6. void print_hex(void *data, size_t len, unsigned int flag);
  7. //---[ flags: ]----------------------------------------------------------------
  8. // hex output flags:
  9. #define HEX_SKIP_ASCII   1
  10. #define HEX_SKIP_WS      2
  11. #define HEX_SKIP_TAB     4
  12. #define HEX_SKIP_NL      8
  13. #define HEX_SKIP_OFFSET 16
  14. #define HEX_SKIP_HEX    32
  15.  
  16.  
  17.  
  18. //---[ macros: ]----------------------------------------------------------------
  19. #define TOI(a) (a[0]<<24|a[1]<<16|a[2]<<8|a[3])
  20. #define TOA(w) { \
  21.     char *c = (char *)&w; \
  22.     if (isprint(c[0]) && isprint(c[1]) && isprint(c[2]) && isprint(c[3])) \
  23.         printf("%c%c%c%c\n", c[3], c[2], c[1], c[0]); \
  24. }
  25. #define TOX(s, bufsize, buf) \
  26. { \
  27.     int i; \
  28.     int slen = strlen(s); \
  29.     for (i = 0; (i < slen) && (i < (bufsize << 1)); i++) { \
  30.         s[i] |= 0x20; \
  31.         if (s[i] >= '0' && (s[i] <= '9')) \
  32.             s[i] -= '0'; \
  33.         else \
  34.             s[i] -= 87; \
  35.         if (i % 2) \
  36.             buf[i >> 1] |= s[i]; \
  37.         else \
  38.             buf[i >> 1] = s[i] << 4; \
  39.     } \
  40. }
  41.  
  42. #define print_hex(data, len, flag)                                      \
  43. do {                                                                    \
  44.     unsigned char *in = (unsigned char *)data;                          \
  45.     int i, j;                                                           \
  46.                                                                         \
  47.     if (!(flag & HEX_SKIP_TAB))                                         \
  48.         printf("\t");                                                   \
  49.                                                                         \
  50.     i = 0;                                                              \
  51.     while (i < len) {                                                   \
  52.         if (!(flag & HEX_SKIP_OFFSET))                                  \
  53.             printf("%02x: ", i);                                        \
  54.                                                                         \
  55.         if (!(flag & HEX_SKIP_HEX)) {                                   \
  56.             for (j = 0; j < 16 && i + j < len; j++) {                   \
  57.                 printf("%02x", in[i + j]);                              \
  58.                 if (!(flag & HEX_SKIP_WS))                              \
  59.                     printf(" ");                                        \
  60.             }                                                           \
  61.                                                                         \
  62.             while (j++ < 16)                                            \
  63.                 printf("   ");                                          \
  64.         }                                                               \
  65.                                                                         \
  66.         if (!(flag & HEX_SKIP_ASCII)) {                                 \
  67.             if (!(flag & HEX_SKIP_HEX))                                 \
  68.                 printf("| ");                                           \
  69.             for (j = 0; j < 16 && i + j < len; j++)                     \
  70.                 printf("%c", isprint(in[i + j]) ? in[i + j] : '.');     \
  71.         }                                                               \
  72.         i += 16;                                                        \
  73.         if (!(flag & HEX_SKIP_NL))                                      \
  74.             printf("\n");                                               \
  75.                                                                         \
  76.         if (!(flag & HEX_SKIP_TAB))                                     \
  77.             printf("\t");                                               \
  78.     }                                                                   \
  79.                                                                         \
  80.     printf("\n");                                                       \
  81. } while(0)
  82.  
  83. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement