diff --git a/lib/print.c b/lib/print.c index 30e5a06..78424bd 100644 --- a/lib/print.c +++ b/lib/print.c @@ -243,30 +243,19 @@ static size_t print_hex(char** str, size_t* size, uint64_t hex, uint32_t padding print_printed(&length, print_char(str, size, '0')); print_printed(&length, print_char(str, size, 'x')); } - uint8_t digits = 0; // number of digits to print // figure out number of digits to print - if (hex > 0xffffffffffffffUL) { - digits = 16; - } else if (hex > 0xffffffffffffUL) { - digits = 14; - } else if (hex > 0xffffffffffUL) { - digits = 12; - } else if (hex > 0xffffffffUL) { - digits = 10; - } else if (hex > 0xffffffUL) { - digits = 8; - } else if (hex > 0xffffUL) { - digits = 6; - } else if (hex > 0xffUL) { - digits = 4; - } else { - digits = 2; + uint8_t nibbles; // number of nibbles to print + for (nibbles = 0; nibbles < 16; nibbles++) { + if (0 == (hex >> (nibbles * 4))) { + break; + } } - for (uint32_t zeros = digits; zeros < padding; zeros++) { // print padding 0's + + for (uint32_t zeros = nibbles; zeros < padding; zeros++) { // print padding 0's print_printed(&length, print_char(str, size, '0')); // print 0 } - for (uint8_t digit = 0; digit < digits; digit++) { // go through all digits - print_printed(&length, print_nibble(str, size, hex >> ((digits - digit - 1) * 4), upcase)); // print nibble (in reverse order) + for (uint8_t nibble = 0; nibble < nibbles; nibble++) { // go through all nibbles + print_printed(&length, print_nibble(str, size, hex >> ((nibbles - nibble - 1) * 4), upcase)); // print nibble (in reverse order) } return length; // return number of characters printed }