init
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
//
|
||||
// Created by bruno on 6.2.2025.
|
||||
//
|
||||
|
||||
#include "hexdump.h"
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <malloc.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#define BYTES_PER_LINE 8 // Adjust for different widths
|
||||
|
||||
|
||||
char *hexdump_to_string(const unsigned char *data, uint32_t start, uint32_t end) {
|
||||
if (start >= end) return NULL; // Invalid range
|
||||
|
||||
// Estimate max output size: each line is approx. 80 chars
|
||||
uint32_t estimated_size = ((end - start) / BYTES_PER_LINE + 1) * 60;
|
||||
|
||||
// Allocate memory for output string
|
||||
char *output = malloc(estimated_size);
|
||||
if (!output) return NULL;
|
||||
|
||||
uint32_t out_offset = 0; // Tracks position in output buffer
|
||||
|
||||
for (uint32_t i = start; i < end; i += BYTES_PER_LINE) {
|
||||
// Print offset
|
||||
out_offset += snprintf(output + out_offset, estimated_size - out_offset, "%07x ", i);
|
||||
|
||||
// Print hex values
|
||||
for (uint32_t j = 0; j < BYTES_PER_LINE; j++) {
|
||||
if (i + j < end)
|
||||
out_offset += snprintf(output + out_offset, estimated_size - out_offset, "%02x ", data[i + j]);
|
||||
else
|
||||
out_offset += snprintf(output + out_offset, estimated_size - out_offset, " "); // Padding
|
||||
if (j == 7)
|
||||
out_offset += snprintf(output + out_offset, estimated_size - out_offset, " "); // Extra space
|
||||
}
|
||||
|
||||
out_offset += snprintf(output + out_offset, estimated_size - out_offset, "\n");
|
||||
}
|
||||
out_offset += snprintf(output + out_offset, estimated_size - out_offset, "\n");
|
||||
|
||||
return output;
|
||||
}
|
||||
Reference in New Issue
Block a user