Howto redirect (convert from hex to dec/Serial.print) fcn output into a var?

Excellent! I appreciate your guidance. Here's the output:

sprintf datetime is: 18-17-04_17:81:09, Sun,
which should be:
sprintf datetime is: 12-11-04_11:51:09, Sun.

So, I think the sprintf codeblock is correctly recognizing input from the r[] array. The code is getting close; I think I need to bitshift or some similar operation. I notice that when a byte is reported incorrectly, it is off by six, typically. So that makes me wonder if I'm failing to convert to/from hex/dec.

Here's the codeblock based on everyone's input and the man page:

const char *SD_datetime_mask = 
  {
    PSTR("sprintf datetime is: %02d-%2d-%.2d_%.2d:%.2d:%.2d, %s ")
  };

  sprintf_P(SD_datetime, SD_datetime_mask, r[6], r[5], r[4], r[2], r[1], r[0], Ddd[r[3]]);
  Serial.print(SD_datetime);

Elsewhere, the functional code that goes straight to Serial.print uses:

  Serial.print(v >> 4, HEX);
  Serial.print(v & 0XF, HEX);

I think I need to apply those operations somehow to my data before displaying the sprintf'ed string. Am I on the right track?