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)); }