@@ -69,41 +69,41 @@ size_t Print::print(char c)
69
69
return write (c);
70
70
}
71
71
72
- size_t Print::print (unsigned char b, int base)
72
+ size_t Print::print (unsigned char b, int base, int arg )
73
73
{
74
- return print ((unsigned long ) b, base);
74
+ return print ((unsigned long ) b, base, arg );
75
75
}
76
76
77
- size_t Print::print (int n, int base)
77
+ size_t Print::print (int n, int base, int arg )
78
78
{
79
- return print ((long ) n, base);
79
+ return print ((long ) n, base, arg );
80
80
}
81
81
82
- size_t Print::print (unsigned int n, int base)
82
+ size_t Print::print (unsigned int n, int base, int arg )
83
83
{
84
84
return print ((unsigned long ) n, base);
85
85
}
86
86
87
- size_t Print::print (long n, int base)
87
+ size_t Print::print (long n, int base, int arg )
88
88
{
89
89
if (base == 0 ) {
90
90
return write (n);
91
91
} else if (base == 10 ) {
92
92
if (n < 0 ) {
93
93
int t = print (' -' );
94
94
n = -n;
95
- return printNumber (n, 10 ) + t;
95
+ return printNumber (n, 10 , arg ) + t;
96
96
}
97
- return printNumber (n, 10 );
97
+ return printNumber (n, 10 , arg );
98
98
} else {
99
- return printNumber (n, base);
99
+ return printNumber (n, base, arg );
100
100
}
101
101
}
102
102
103
- size_t Print::print (unsigned long n, int base)
103
+ size_t Print::print (unsigned long n, int base, int arg )
104
104
{
105
105
if (base == 0 ) return write (n);
106
- else return printNumber (n, base);
106
+ else return printNumber (n, base, arg );
107
107
}
108
108
109
109
size_t Print::print (double n, int digits)
@@ -149,37 +149,37 @@ size_t Print::println(char c)
149
149
return n;
150
150
}
151
151
152
- size_t Print::println (unsigned char b, int base)
152
+ size_t Print::println (unsigned char b, int base, int arg )
153
153
{
154
- size_t n = print (b, base);
154
+ size_t n = print (b, base, arg );
155
155
n += println ();
156
156
return n;
157
157
}
158
158
159
- size_t Print::println (int num, int base)
159
+ size_t Print::println (int num, int base, int arg )
160
160
{
161
- size_t n = print (num, base);
161
+ size_t n = print (num, base, arg );
162
162
n += println ();
163
163
return n;
164
164
}
165
165
166
- size_t Print::println (unsigned int num, int base)
166
+ size_t Print::println (unsigned int num, int base, int arg )
167
167
{
168
- size_t n = print (num, base);
168
+ size_t n = print (num, base, arg );
169
169
n += println ();
170
170
return n;
171
171
}
172
172
173
- size_t Print::println (long num, int base)
173
+ size_t Print::println (long num, int base, int arg )
174
174
{
175
- size_t n = print (num, base);
175
+ size_t n = print (num, base, arg );
176
176
n += println ();
177
177
return n;
178
178
}
179
179
180
- size_t Print::println (unsigned long num, int base)
180
+ size_t Print::println (unsigned long num, int base, int arg )
181
181
{
182
- size_t n = print (num, base);
182
+ size_t n = print (num, base, arg );
183
183
n += println ();
184
184
return n;
185
185
}
@@ -200,7 +200,7 @@ size_t Print::println(const Printable& x)
200
200
201
201
// Private Methods /////////////////////////////////////////////////////////////
202
202
203
- size_t Print::printNumber (unsigned long n, uint8_t base)
203
+ size_t Print::printNumber (unsigned long n, uint8_t base, uint8_t arg )
204
204
{
205
205
char buf[8 * sizeof (long ) + 1 ]; // Assumes 8-bit chars plus zero byte.
206
206
char *str = &buf[sizeof (buf) - 1 ];
@@ -209,14 +209,16 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
209
209
210
210
// prevent crash if called with base == 1
211
211
if (base < 2 ) base = 10 ;
212
-
213
- do {
212
+ // the argument is only valid for HEX values smaler than 0x10
213
+ if (base != 8 || n>=16 ) arg = 0 ;
214
+
215
+ do {
214
216
char c = n % base;
215
217
n /= base;
216
218
217
219
*--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
218
220
} while (n);
219
-
221
+ if (arg == 1 )*--str = ' 0 ' ;
220
222
return write (str);
221
223
}
222
224
0 commit comments