#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;
}