Gistrec icon

Hex dump function

Gistrec | PRO | 02/02/19 11:37:37 AM UTC | 0 ⭐ | 571 👁️ | Never ⏰ | []
C |

1.64 KB

|

None

|

0 👍

/

0 👎

/**
 * Функция выводит hex представление буффера
 * Например
 * char buffer[] = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
 * hexdump(buffer, 150)
 *
 * Вывод:
 *   0: 4c 6f 72 65 6d 20 49 70    73 75 6d 20 69 73 20 73  [Lorem Ipsum is s]
 *  10: 69 6d 70 6c 79 20 64 75    6d 6d 79 20 74 65 78 74  [imply dummy text]
 *  20: 20 6f 66 20 74 68 65 20    70 72 69 6e 74 69 6e 67  [ of the printing]
 *  30: 20 61 6e 64 20 74 79 70    65 73 65 74 74 69 6e 67  [ and typesetting]
 *  40: 20 69 6e 64 75 73 74 72    79 2e                    [ industry.      ]
 */
 
void hexdump(char* data, int size) {
    for (int i = 0; i < size; i++) {
        if (i % 16 == 0) {
            if (i != 0) {  // Вывод ASCII символов
                printf(" [");
                for (int j = -16; j < 0; j++) {
                    printf("%c", data[i + j] < ' ' ? '.' : data[i + j]);
                }
                printf("]\n");
            }
            printf("%4x: ", i); // Вывод смещения
        }
        if (i % 8 == 0 && i % 16 != 0) printf("   ");
        printf("%02x ", data[i]);
    }
    if (size % 16 != 0) {
        for (int i = size % 16; i < 16; i++) {
            printf("   ");
        }
        printf(" [");
        for (int j = 0; j < size % 16; j++) {
            char symbol = data[(size - size % 16) + j];
            if (symbol < ' ') symbol = '.';
                    
            printf("%c", symbol < ' ' : '.' : symbol);
        }
        for (int j = size % 16; j < 16; j++) printf(" ");
        printf("]\n");
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎