@@ -125,7 +125,7 @@ char * String::getCSpec(int base, bool issigned, bool islong){
125
125
String::String (unsigned char value, unsigned char base)
126
126
{
127
127
init ();
128
- char buf[9 ];
128
+ char buf[1 + 8 * sizeof ( unsigned char ) ];
129
129
// utoa(value, buf, base);
130
130
snprintf (buf, sizeof (buf), getCSpec (base, false , false ), value);
131
131
*this = buf;
@@ -134,7 +134,7 @@ String::String(unsigned char value, unsigned char base)
134
134
String::String (int value, unsigned char base)
135
135
{
136
136
init ();
137
- char buf[18 ];
137
+ char buf[2 + 8 * sizeof ( int ) ];
138
138
// itoa(value, buf, base);
139
139
snprintf (buf, sizeof (buf), getCSpec (base, true , false ), value);
140
140
*this = buf;
@@ -143,7 +143,7 @@ String::String(int value, unsigned char base)
143
143
String::String (unsigned int value, unsigned char base)
144
144
{
145
145
init ();
146
- char buf[17 ];
146
+ char buf[1 + 8 * sizeof ( unsigned int ) ];
147
147
// utoa(value, buf, base);
148
148
snprintf (buf, sizeof (buf), getCSpec (base, false , false ), value);
149
149
*this = buf;
@@ -152,7 +152,7 @@ String::String(unsigned int value, unsigned char base)
152
152
String::String (long value, unsigned char base)
153
153
{
154
154
init ();
155
- char buf[34 ];
155
+ char buf[2 + 8 * sizeof ( long ) ];
156
156
// ltoa(value, buf, base);
157
157
snprintf (buf, sizeof (buf), getCSpec (base, true , true ), value);
158
158
*this = buf;
@@ -161,7 +161,25 @@ String::String(long value, unsigned char base)
161
161
String::String (unsigned long value, unsigned char base)
162
162
{
163
163
init ();
164
- char buf[33 ];
164
+ char buf[1 + 8 * sizeof (unsigned long )];
165
+ // ultoa(value, buf, base);
166
+ snprintf (buf, sizeof (buf), getCSpec (base, false , true ), value);
167
+ *this = buf;
168
+ }
169
+
170
+ String::String (long long value, unsigned char base)
171
+ {
172
+ init ();
173
+ char buf[2 + 8 * sizeof (long long )];
174
+ // ltoa(value, buf, base);
175
+ snprintf (buf, sizeof (buf), getCSpec (base, true , true ), value);
176
+ *this = buf;
177
+ }
178
+
179
+ String::String (unsigned long long value, unsigned char base)
180
+ {
181
+ init ();
182
+ char buf[1 + 8 * sizeof (unsigned long long )];
165
183
// ultoa(value, buf, base);
166
184
snprintf (buf, sizeof (buf), getCSpec (base, false , true ), value);
167
185
*this = buf;
@@ -337,37 +355,53 @@ unsigned char String::concat(char c)
337
355
338
356
unsigned char String::concat (unsigned char num)
339
357
{
340
- char buf[4 ];
358
+ char buf[1 + 3 * sizeof ( unsigned char ) ];
341
359
// itoa(num, buf, 10);
342
360
snprintf (buf, sizeof (buf), getCSpec (10 , true , false ), num);
343
361
return concat (buf, strlen (buf));
344
362
}
345
363
346
364
unsigned char String::concat (int num)
347
365
{
348
- char buf[7 ];
366
+ char buf[2 + 3 * sizeof ( int ) ];
349
367
// itoa(num, buf, 10);
350
368
snprintf (buf, sizeof (buf), getCSpec (10 , true , false ), num);
351
369
return concat (buf, strlen (buf));
352
370
}
353
371
354
372
unsigned char String::concat (unsigned int num)
355
373
{
356
- char buf[6 ];
374
+ char buf[1 + 3 * sizeof ( unsigned int ) ];
357
375
// utoa(num, buf, 10);
358
376
snprintf (buf, sizeof (buf), getCSpec (10 , false , false ), num);
359
377
return concat (buf, strlen (buf));
360
378
}
361
379
362
380
unsigned char String::concat (long num)
363
381
{
364
- char buf[12 ];
382
+ char buf[2 + 3 * sizeof ( long ) ];
365
383
// ltoa(num, buf, 10);
366
384
snprintf (buf, sizeof (buf), getCSpec (10 , true , true ), num);
367
385
return concat (buf, strlen (buf));
368
386
}
369
387
370
388
unsigned char String::concat (unsigned long num)
389
+ {
390
+ char buf[1 + 3 * sizeof (unsigned long )];
391
+ // ultoa(num, buf, 10);
392
+ snprintf (buf, sizeof (buf), getCSpec (10 , false , true ), num);
393
+ return concat (buf, strlen (buf));
394
+ }
395
+
396
+ unsigned char String::concat (long long num)
397
+ {
398
+ char buf[12 ];
399
+ // ltoa(num, buf, 10);
400
+ snprintf (buf, sizeof (buf), getCSpec (10 , true , true ), num);
401
+ return concat (buf, strlen (buf));
402
+ }
403
+
404
+ unsigned char String::concat (unsigned long long num)
371
405
{
372
406
char buf[11 ];
373
407
// ultoa(num, buf, 10);
@@ -449,6 +483,20 @@ StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num)
449
483
return a;
450
484
}
451
485
486
+ StringSumHelper & operator + (const StringSumHelper &lhs, long long num)
487
+ {
488
+ StringSumHelper &a = const_cast <StringSumHelper&>(lhs);
489
+ if (!a.concat (num)) a.invalidate ();
490
+ return a;
491
+ }
492
+
493
+ StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long long num)
494
+ {
495
+ StringSumHelper &a = const_cast <StringSumHelper&>(lhs);
496
+ if (!a.concat (num)) a.invalidate ();
497
+ return a;
498
+ }
499
+
452
500
StringSumHelper & operator + (const StringSumHelper &lhs, float num)
453
501
{
454
502
StringSumHelper &a = const_cast <StringSumHelper&>(lhs);
0 commit comments