@@ -110,24 +110,37 @@ size_t Print::print(unsigned int n, int base)
110110}
111111
112112size_t Print::print (long n, int base)
113+ {
114+ int t = 0 ;
115+ if (base == 10 && n < 0 ) {
116+ t = print (' -' );
117+ n = -n;
118+ }
119+ return printNumber (static_cast <unsigned long >(n), base) + t;
120+ }
121+
122+ size_t Print::print (unsigned long n, int base)
113123{
114124 if (base == 0 ) {
115125 return write (n);
116- } else if (base == 10 ) {
117- if (n < 0 ) {
118- int t = print (' -' );
119- n = -n;
120- return printNumber (n, 10 ) + t;
121- }
122- return printNumber (n, 10 );
123126 } else {
124127 return printNumber (n, base);
125128 }
126129}
127130
128- size_t Print::print (unsigned long n, int base)
131+ size_t Print::print (long long n, int base)
129132{
130- if (base == 0 ) {
133+ int t = 0 ;
134+ if (base == 10 && n < 0 ) {
135+ t = print (' -' );
136+ n = -n;
137+ }
138+ return printNumber (static_cast <unsigned long long >(n), base) + t;
139+ }
140+
141+ size_t Print::print (unsigned long long n, int base)
142+ {
143+ if (base == 0 ) {
131144 return write (n);
132145 } else {
133146 return printNumber (n, base);
@@ -226,6 +239,20 @@ size_t Print::println(unsigned long num, int base)
226239 return n;
227240}
228241
242+ size_t Print::println (long long num, int base)
243+ {
244+ size_t n = print (num, base);
245+ n += println ();
246+ return n;
247+ }
248+
249+ size_t Print::println (unsigned long long num, int base)
250+ {
251+ size_t n = print (num, base);
252+ n += println ();
253+ return n;
254+ }
255+
229256size_t Print::println (double num, int digits)
230257{
231258 size_t n = print (num, digits);
@@ -251,7 +278,7 @@ size_t Print::println(struct tm * timeinfo, const char * format)
251278
252279size_t Print::printNumber (unsigned long n, uint8_t base)
253280{
254- char buf[8 * sizeof (long ) + 1 ]; // Assumes 8-bit chars plus zero byte.
281+ char buf[8 * sizeof (n ) + 1 ]; // Assumes 8-bit chars plus zero byte.
255282 char *str = &buf[sizeof (buf) - 1 ];
256283
257284 *str = ' \0 ' ;
@@ -262,11 +289,34 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
262289 }
263290
264291 do {
265- unsigned long m = n;
292+ char c = n % base;
293+ n /= base;
294+
295+ *--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
296+ } while (n);
297+
298+ return write (str);
299+ }
300+
301+ size_t Print::printNumber (unsigned long long n, uint8_t base)
302+ {
303+ char buf[8 * sizeof (n) + 1 ]; // Assumes 8-bit chars plus zero byte.
304+ char * str = &buf[sizeof (buf) - 1 ];
305+
306+ *str = ' \0 ' ;
307+
308+ // prevent crash if called with base == 1
309+ if (base < 2 ) {
310+ base = 10 ;
311+ }
312+
313+ do {
314+ auto m = n;
266315 n /= base;
267316 char c = m - base * n;
317+
268318 *--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
269- } while (n);
319+ } while (n);
270320
271321 return write (str);
272322}
0 commit comments