print: fix padding on hex printing
This commit is contained in:
parent
3b7179d49a
commit
55c6319928
29
lib/print.c
29
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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue