From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set expandtab shiftwidth=4 tabstop=4: */
#include "arraytoc.h"
#include <stdio.h>
// dump uint32_t as hex digits
void uint32_array_to_c_hex(const uint32_t* ary, size_t sz, const char* name)
{
printf("static const uint32_t %s[%d] = {\n", name, (int)sz);
size_t i = 0;
for (;;) {
printf("0x%08x", ary[i]);
++i;
if (i == sz) break;
if (i % 6 == 0) {
printf(",\n");
} else {
printf(", ");
}
}
printf("\n};\n");
}
/**
* prints char array as a c program snippet
*/
void char_array_to_c(const char* ary, size_t sz, const char* name)
{
printf("static const unsigned char %s[%d] = {\n", name, (int)sz);
uint8_t tmp;
size_t i = 0;
for (;;) {
if (ary[i] == 0) {
printf("'\\0'");
} else if (ary[i] == '\n') {
printf("'\\n'");
} else if (ary[i] == '\t') {
printf("'\\t'");
} else if (ary[i] == '\r') {
printf("'\\r'");
} else if (ary[i] == '\'') {
printf("'\\''");
} else if (ary[i] == '\\') {
printf("'\\\\'");
} else if (ary[i] < 32 || ary[i] > 126) {
tmp = (uint8_t) ary[i];
printf("0x%02x", tmp);
} else {
printf(" '%c'", (char)ary[i]);
}
++i;
if (i == sz) break;
if (i % 10 == 0) {
printf(",\n");
} else {
printf(", ");
}
}
printf("\n};\n\n");
}
/**
* prints an uint array as a c program snippet
*/
void uint32_array_to_c(const uint32_t* ary, size_t sz, const char* name)
{
printf("static const uint32_t %s[%d] = {\n", name, (int)sz);
size_t i = 0;
for (;;) {
printf("%3d", ary[i]);
++i;
if (i == sz) break;
if (i % 12 == 0) {
printf(",\n");
} else {
printf(", ");
}
}
printf("\n};\n\n");
}