File tree 1 file changed +10
-3
lines changed
1 file changed +10
-3
lines changed Original file line number Diff line number Diff line change @@ -202,7 +202,7 @@ size_t Print::println(const Printable& x)
202
202
203
203
size_t Print::printNumber (unsigned long n, uint8_t base)
204
204
{
205
- // shortcut printing just 0 prevents later overhead
205
+ // shortcut printing just 0 and prevent later overhead
206
206
if (n == 0 ) {
207
207
return write (' 0' );
208
208
}
@@ -212,6 +212,10 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
212
212
213
213
unsigned long reverse = 0 ;
214
214
uint8_t digits = 0 ;
215
+ char avoid_overflow = n % base;
216
+
217
+ // this step and 'avoid_overflow' will make sure it stays in unsigned long range beeing able to print all 10 digits no matter what
218
+ n /= base;
215
219
216
220
// reverse the number and count digits
217
221
while (n != 0 ) {
@@ -222,13 +226,16 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
222
226
}
223
227
224
228
// from here onwards reuse of variable 'n' to count written chars
225
- do {
229
+ while (digits--) {
226
230
char c = reverse % base;
227
231
reverse /= base;
228
232
229
233
c = (c < 10 ? c + ' 0' : c + ' A' - 10 );
230
234
n += write (c);
231
- } while (--digits);
235
+ }
236
+
237
+ avoid_overflow = (avoid_overflow < 10 ? avoid_overflow + ' 0' : avoid_overflow + ' A' - 10 );
238
+ n += write (avoid_overflow);
232
239
233
240
return n;
234
241
}
You can’t perform that action at this time.
0 commit comments