@@ -155,7 +155,7 @@ typedef enum {
155
155
*/
156
156
static void mbed_minimal_formatted_string_signed (char * buffer , size_t length , int * result , MBED_SIGNED_STORAGE value );
157
157
static void mbed_minimal_formatted_string_unsigned (char * buffer , size_t length , int * result , MBED_UNSIGNED_STORAGE value );
158
- static void mbed_minimal_formatted_string_hexadecimal (char * buffer , size_t length , int * result , MBED_UNSIGNED_STORAGE value );
158
+ static void mbed_minimal_formatted_string_hexadecimal (char * buffer , size_t length , int * result , MBED_UNSIGNED_STORAGE value , bool upper );
159
159
static void mbed_minimal_formatted_string_void_pointer (char * buffer , size_t length , int * result , const void * value );
160
160
static void mbed_minimal_formatted_string_character (char * buffer , size_t length , int * result , char character );
161
161
static void mbed_minimal_formatted_string_string (char * buffer , size_t length , int * result , const char * string , size_t precision );
@@ -268,8 +268,9 @@ static void mbed_minimal_formatted_string_unsigned(char* buffer, size_t length,
268
268
* @param[in] length The length of the buffer.
269
269
* @param result The current output location.
270
270
* @param[in] value The value to be printed.
271
+ * @param upper Flag to print the hexadecimal in upper or lower case.
271
272
*/
272
- static void mbed_minimal_formatted_string_hexadecimal (char * buffer , size_t length , int * result , MBED_UNSIGNED_STORAGE value )
273
+ static void mbed_minimal_formatted_string_hexadecimal (char * buffer , size_t length , int * result , MBED_UNSIGNED_STORAGE value , bool upper )
273
274
{
274
275
bool print_leading_zero = false;
275
276
@@ -284,8 +285,11 @@ static void mbed_minimal_formatted_string_hexadecimal(char* buffer, size_t lengt
284
285
unsigned int nibble_one = (output >> 4 );
285
286
unsigned int nibble_two = (output & 0x0F );
286
287
287
- const char int2hex [16 ] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' ,
288
+ const char int2hex_lower [16 ] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' ,
289
+ '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' };
290
+ const char int2hex_upper [16 ] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' ,
288
291
'8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' };
292
+ const char * int2hex = upper ? int2hex_upper : int2hex_lower ;
289
293
290
294
if (print_leading_zero || nibble_one != 0 ) {
291
295
mbed_minimal_putchar (buffer , length , result , int2hex [nibble_one ]);
@@ -313,7 +317,7 @@ static void mbed_minimal_formatted_string_void_pointer(char* buffer, size_t leng
313
317
mbed_minimal_putchar (buffer , length , result , 'x' );
314
318
315
319
/* write rest as a regular hexadecimal number */
316
- mbed_minimal_formatted_string_hexadecimal (buffer , length , result , (ptrdiff_t ) value );
320
+ mbed_minimal_formatted_string_hexadecimal (buffer , length , result , (ptrdiff_t ) value , true );
317
321
}
318
322
319
323
#if MBED_CONF_MINIMAL_PRINTF_ENABLE_FLOATING_POINT
@@ -367,6 +371,18 @@ static void mbed_minimal_formatted_string_double(char* buffer, size_t length, in
367
371
decimal ++ ;
368
372
}
369
373
374
+ /* convert precision to unsigned integer */
375
+ MBED_UNSIGNED_STORAGE precision_in_uint = precision ;
376
+ precision_in_uint /= 10 ;
377
+
378
+ /* ensure that leading zeros are printed if decimal equals 0 */
379
+ MBED_UNSIGNED_STORAGE val = decimal ? decimal : decimal + 1 ;
380
+ while (precision_in_uint > val ) {
381
+ /* print leading zeros */
382
+ mbed_minimal_putchar (buffer , length , result , '0' );
383
+ precision_in_uint /= 10 ;
384
+ }
385
+
370
386
/* write decimal part */
371
387
mbed_minimal_formatted_string_unsigned (buffer , length , result , decimal );
372
388
}
@@ -694,7 +710,7 @@ int mbed_minimal_formatted_string(char* buffer, size_t length, const char* forma
694
710
}
695
711
else
696
712
{
697
- mbed_minimal_formatted_string_hexadecimal (buffer , length , & result , value );
713
+ mbed_minimal_formatted_string_hexadecimal (buffer , length , & result , value , next == 'X' );
698
714
}
699
715
}
700
716
#if MBED_CONF_MINIMAL_PRINTF_ENABLE_FLOATING_POINT
0 commit comments