@@ -110,24 +110,37 @@ size_t Print::print(unsigned int n, int base)
110
110
}
111
111
112
112
size_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)
113
123
{
114
124
if (base == 0 ) {
115
125
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 );
123
126
} else {
124
127
return printNumber (n, base);
125
128
}
126
129
}
127
130
128
- size_t Print::print (unsigned long n, int base)
131
+ size_t Print::print (long long n, int base)
129
132
{
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 ) {
131
144
return write (n);
132
145
} else {
133
146
return printNumber (n, base);
@@ -226,6 +239,20 @@ size_t Print::println(unsigned long num, int base)
226
239
return n;
227
240
}
228
241
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
+
229
256
size_t Print::println (double num, int digits)
230
257
{
231
258
size_t n = print (num, digits);
@@ -251,7 +278,7 @@ size_t Print::println(struct tm * timeinfo, const char * format)
251
278
252
279
size_t Print::printNumber (unsigned long n, uint8_t base)
253
280
{
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.
255
282
char *str = &buf[sizeof (buf) - 1 ];
256
283
257
284
*str = ' \0 ' ;
@@ -262,11 +289,34 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
262
289
}
263
290
264
291
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;
266
315
n /= base;
267
316
char c = m - base * n;
317
+
268
318
*--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
269
- } while (n);
319
+ } while (n);
270
320
271
321
return write (str);
272
322
}
0 commit comments