编辑代码

#include <stdio.h>

typedef unsigned long long int           uint64_t;
typedef unsigned int                     uint32_t;
typedef unsigned short                   uint16_t;
typedef unsigned char                    uint8_t;

#define PRINT   printf
#define NEWLINE "\r\n"

void print_memory(uint32_t start_addr, uint8_t* data, uint16_t len) {
    uint32_t line = (len & 0x0F) ? (len / 0x10 + 1) : (len / 0x10);

    for (uint16_t i = 0; i < line; i++) {
        PRINT("0x%04X  ", i * 0x10 + start_addr);
        for (uint16_t j = 0; j < 0x10; j += 4) {
            for (uint8_t k = 0; k < 4; k++) {
                if (i * 0x10 + j + k >= len) {
                    PRINT(NEWLINE);
                    return;
                }
                PRINT(" %02X", *(data + i * 0x10 + j - k));
            }
        }
        PRINT(NEWLINE);
    }
    PRINT(NEWLINE);
}

int main () {
    uint8_t data[] = {
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
        0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
        0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
        };

    print_memory(0x0, data, sizeof(data));
    return 0;
}