If you're developing UEFI firmware content, sooner or later you're going to want to dump binary data using the debug facility.
And so, without further ado:
(...)
#include <Library/BaseLib.h>
#include <Library/PrintLib.h>
(...)
STATIC
VOID
DumpBufferHex (
VOID* Buf,
UINTN Size
)
{
UINT8* Buffer = (UINT8*)Buf;
UINTN i, j, k;
char Line[80] = "";
for (i = 0; i < Size; i += 16) {
if (i != 0) {
DEBUG ((DEBUG_INFO, "%a\n", Line));
}
Line[0] = 0;
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), " %08x ", i);
for (j = 0, k = 0; k < 16; j++, k++) {
if (i + j < Size) {
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), "%02x", Buffer[i + j]);
} else {
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), " ");
}
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), " ");
}
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), " ");
for (j = 0, k = 0; k < 16; j++, k++) {
if (i + j < Size) {
if ((Buffer[i + j] < 32) || (Buffer[ i + j] > 126)) {
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), ".");
} else {
AsciiSPrint (&Line[AsciiStrLen (Line)], 80 - AsciiStrLen (Line), "%c", Buffer[i + j]);
}
}
}
}
DEBUG ((DEBUG_INFO, "%a\n", Line));
}