print: add support for uint64_t hexadecimal
This commit is contained in:
parent
dba76454af
commit
ed0245ae54
26
lib/print.c
26
lib/print.c
|
@ -159,7 +159,7 @@ static size_t print_nibble(char** str, size_t* size, uint8_t nibble, bool upcase
|
|||
* @param[in] upcase use upcase digits (A-F)
|
||||
* @return number of characters printed
|
||||
**/
|
||||
static size_t print_hex(char** str, size_t* size, uint32_t hex, uint32_t padding, bool prefix, bool upcase) {
|
||||
static size_t print_hex(char** str, size_t* size, uint64_t hex, uint32_t padding, bool prefix, bool upcase) {
|
||||
size_t length = 0; // number of characters printed
|
||||
if (prefix) { // print 0x prefix
|
||||
print_printed(&length, print_char(str, size, '0'));
|
||||
|
@ -167,11 +167,19 @@ static size_t print_hex(char** str, size_t* size, uint32_t hex, uint32_t padding
|
|||
}
|
||||
uint8_t digits = 0; // number of digits to print
|
||||
// figure out number of digits to print
|
||||
if (hex>0x00ffffff) {
|
||||
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>0x0000ffff) {
|
||||
} else if (hex>0xffffUL) {
|
||||
digits = 6;
|
||||
} else if (hex>0x000000ff) {
|
||||
} else if (hex>0xffUL) {
|
||||
digits = 4;
|
||||
} else {
|
||||
digits = 2;
|
||||
|
@ -287,12 +295,18 @@ static size_t vsnprintf(char** str, size_t* size, const char *format, va_list va
|
|||
case 'c': // for char, unsigned char
|
||||
print_printed(&length, print_char(str, size, (char)(va_arg(va,int)))); // needs casting because the returned value is promoted
|
||||
break;
|
||||
case 'x': // for downcase hexadecimal
|
||||
case 'x': // for uint8_t, uint16_t, uint32_t downcase hexadecimal
|
||||
print_printed(&length, print_hex(str, size, va_arg(va,uint32_t), padding, sign, false));
|
||||
break;
|
||||
case 'X': // for upcase hexadecimal
|
||||
case 'X': // for uint64_t downcase hexadecimal
|
||||
print_printed(&length, print_hex(str, size, va_arg(va,uint64_t), padding, sign, false));
|
||||
break;
|
||||
case 'h': // for uint8_t, uint16_t, uint32_t upcase hexadecimal
|
||||
print_printed(&length, print_hex(str, size, va_arg(va,uint32_t), padding, sign, true));
|
||||
break;
|
||||
case 'H': // for uint64_t upcase hexadecimal
|
||||
print_printed(&length, print_hex(str, size, va_arg(va,uint64_t), padding, sign, true));
|
||||
break;
|
||||
case 'b': // for bits
|
||||
print_printed(&length, print_bits(str, size, va_arg(va,uint32_t), padding, sign));
|
||||
break;
|
||||
|
|
13
lib/print.h
13
lib/print.h
|
@ -14,7 +14,18 @@
|
|||
*/
|
||||
/** printing utilities to replace the large printf from the standard library (API)
|
||||
* @note use % as format specifier prefix, followed by + to enforce sign or 0x prefix, 0 followed by n for padding, . followed by n for number for fractional, and format specifier
|
||||
* format specifier supported are: c for far, s for string, u for uint32_t, d for int32_t, U for uint64_t, D for int64_t, x for lower case hex up to uint32_t, X for upper case hex up to uint32_t, b for bits up to uint32_t
|
||||
* format specifier supported are:
|
||||
* - c for character
|
||||
* - s for string
|
||||
* - u up to uint32_t
|
||||
* - U for uint64_t
|
||||
* - d up to int32_t
|
||||
* - D for int64_t
|
||||
* - x for lower case hex up to uint32_t
|
||||
* - X for lower case hex for uint64_t
|
||||
* - h for upper case hex up to uint32_t
|
||||
* - H for upper case hex for uint64_t
|
||||
* - b for bits up to uint32_t
|
||||
* @file print.h
|
||||
* @author King Kévin <kingkevin@cuvoodoo.info>
|
||||
* @date 2017
|
||||
|
|
Loading…
Reference in New Issue