#include "Logger.h" void Logger::logbuf(const uint8_t* buf, size_t len) const { if (buf == NULL) { return; } static const char NIBBLE_TO_CHAR[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static const size_t CHARS_PER_HEXBYTE = 2 /* two nibbles */ + 1 /* followed by one blank */; // Maximum number of bytes to log per line. static const size_t MAX_BYTES_PER_LOG_LINE = 16; static const size_t STRING_BUF_LEN = (MAX_BYTES_PER_LOG_LINE * CHARS_PER_HEXBYTE) + sizeof('\0'); // Buffer to build-up one hex string part. char strbuf[STRING_BUF_LEN]; char* p = &strbuf[0]; size_t remainingBytesToLog = len; size_t bufOfs = 0; // Build and log another hex string part. while (remainingBytesToLog > 0) { size_t bytesToLogForThisLine = (remainingBytesToLog <= MAX_BYTES_PER_LOG_LINE) ? remainingBytesToLog : MAX_BYTES_PER_LOG_LINE; for (size_t i = 0; i < bytesToLogForThisLine; ++i) { uint8_t byte = buf[bufOfs + i]; *p++ = NIBBLE_TO_CHAR[byte >> 4]; *p++ = NIBBLE_TO_CHAR[byte & 0x0F]; *p++ = ' '; } *p = '\0'; log(&strbuf[0]); remainingBytesToLog -= bytesToLogForThisLine; bufOfs += bytesToLogForThisLine; } }