Originally Posted by
gratiafide
I was hoping to not have to manually enter all 31 entries though in a giant switch statement.
Well, how about
Code:
char *ascii(const int code, char buffer[3])
{
if (code >= 0 && code < 32) {
buffer[0] = '^';
buffer[1] = '@' + code;
buffer[2] = '\0';
} else {
buffer[0] = code;
buffer[1] = '\0';
}
return (char *)buffer;
}
The ^c map to ASCII control codes 64 less than character c.
You can use that as follows:
Code:
int a, b, c;
char astr[3], bstr[3], cstr[3];
printf("a is %s, b is %s, and c is %s.\n", ascii(a, astr), ascii(b, bstr), ascii(c, cstr));
If you want C string escapes, then
Code:
char *ascii(const int code, char buffer[5])
{
if (code < 0)
buffer[0] = '\0';
else
if (code < 32) {
buffer[0] = '\\';
if (code >= 7 && code <= 13) {
static const char control[8] = "abtnvfr";
buffer[1] = control[code - 7];
buffer[2] = '\0';
} else {
buffer[1] = '0';
buffer[2] = '0' + (code / 8);
buffer[3] = '0' + (code % 8);
buffer[4] = '\0';
}
} else
if (code < 127) {
buffer[0] = code;
buffer[1] = '\0';
} else
if (code < 256) {
buffer[0] = '\\';
buffer[1] = '0' + ((code / 64) % 8);
buffer[2] = '0' + ((code / 8) % 8);
buffer[3] = '0' + (code % 8);
buffer[4] = '\0';
} else
buffer[0] = '\0';
return (char *)buffer;
}