refactor: move hexdump API to utils.h
This commit is contained in:
63
src/utils/utils.h
Normal file
63
src/utils/utils.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
static inline void hexdump_to_fd(int fd, uint32_t idx, const char *data, uint16_t len)
|
||||
{
|
||||
uint16_t i = 0;
|
||||
uint16_t used = 0;
|
||||
uint16_t offset = 0;
|
||||
|
||||
#define LINE_LEN 80
|
||||
char line[LINE_LEN]; /* space needed 8+16*3+3+16 == 75 */
|
||||
while (offset < len)
|
||||
{
|
||||
used = snprintf(line, LINE_LEN, "%08X ", idx + offset);
|
||||
|
||||
// hexdump
|
||||
for (i = 0; ((offset + i) < len) && (i < 16); i++)
|
||||
{
|
||||
if (i == 8)
|
||||
{
|
||||
used += snprintf(line + used, LINE_LEN - used, " ");
|
||||
}
|
||||
used += snprintf(line + used, LINE_LEN - used, " %02x", (data[offset + i] & 0xff));
|
||||
}
|
||||
|
||||
// padding
|
||||
for (; i <= 16; i++)
|
||||
{
|
||||
if (i == 8)
|
||||
{
|
||||
used += snprintf(line + used, LINE_LEN - used, " ");
|
||||
}
|
||||
used += snprintf(line + used, LINE_LEN - used, " ");
|
||||
}
|
||||
|
||||
// ascii
|
||||
for (i = 0; (offset < len) && (i < 16); i++, offset++)
|
||||
{
|
||||
unsigned char c = data[offset];
|
||||
if ((c < ' ') || (c > '~'))
|
||||
{
|
||||
c = '.';
|
||||
}
|
||||
if (i == 8)
|
||||
{
|
||||
used += snprintf(line + used, LINE_LEN - used, " ");
|
||||
}
|
||||
used += snprintf(line + used, LINE_LEN - used, "%c", c);
|
||||
}
|
||||
dprintf(fd, "%s\n", line);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user