print: fix padding on hex printing

This commit is contained in:
King Kévin 2020-06-14 18:59:32 +02:00
parent 3b7179d49a
commit 55c6319928
1 changed files with 9 additions and 20 deletions

View File

@ -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
}