Gistrec

Hex dump function

Feb 2nd, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.64 KB | None | 0 0
  1. /**
  2.  * Функция выводит hex представление буффера
  3.  * Например
  4.  * char buffer[] = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
  5.  * hexdump(buffer, 150)
  6.  *
  7.  * Вывод:
  8.  *   0: 4c 6f 72 65 6d 20 49 70    73 75 6d 20 69 73 20 73  [Lorem Ipsum is s]
  9.  *  10: 69 6d 70 6c 79 20 64 75    6d 6d 79 20 74 65 78 74  [imply dummy text]
  10.  *  20: 20 6f 66 20 74 68 65 20    70 72 69 6e 74 69 6e 67  [ of the printing]
  11.  *  30: 20 61 6e 64 20 74 79 70    65 73 65 74 74 69 6e 67  [ and typesetting]
  12.  *  40: 20 69 6e 64 75 73 74 72    79 2e                    [ industry.      ]
  13.  */
  14.  
  15. void hexdump(char* data, int size) {
  16.     for (int i = 0; i < size; i++) {
  17.         if (i % 16 == 0) {
  18.             if (i != 0) {  // Вывод ASCII символов
  19.                 printf(" [");
  20.                 for (int j = -16; j < 0; j++) {
  21.                     printf("%c", data[i + j] < ' ' ? '.' : data[i + j]);
  22.                 }
  23.                 printf("]\n");
  24.             }
  25.             printf("%4x: ", i); // Вывод смещения
  26.         }
  27.         if (i % 8 == 0 && i % 16 != 0) printf("   ");
  28.         printf("%02x ", data[i]);
  29.     }
  30.     if (size % 16 != 0) {
  31.         for (int i = size % 16; i < 16; i++) {
  32.             printf("   ");
  33.         }
  34.         printf(" [");
  35.         for (int j = 0; j < size % 16; j++) {
  36.             char symbol = data[(size - size % 16) + j];
  37.             if (symbol < ' ') symbol = '.';
  38.                    
  39.             printf("%c", symbol < ' ' : '.' : symbol);
  40.         }
  41.         for (int j = size % 16; j < 16; j++) printf(" ");
  42.         printf("]\n");
  43.     }
  44. }
Add Comment
Please, Sign In to add comment