69
// breendet imp from String
69
// breendet imp from string
71
String_convert::dec2int (String dec_string)
71
String_convert::dec2int (string dec_string)
73
73
if (!dec_string.length ())
77
int conv = sscanf (dec_string.to_str0 (), "%ld", &l);
77
int conv = sscanf (dec_string.c_str (), "%ld", &l);
84
String_convert::i64_string (I64 i64, char const* fmt)
84
String_convert::i64_string (I64 i64, char const *fmt)
86
86
char buffer[STRING_BUFFER_LEN];
87
87
snprintf (buffer, STRING_BUFFER_LEN,
88
(fmt ? fmt : "%Ld"), i64); // assume radix 10
89
return String (buffer);
88
(fmt ? fmt : "%Ld"), i64); // assume radix 10
89
return string (buffer);
92
// breendet imp from String
91
// breendet imp from string
94
String_convert::dec2double (String dec_string)
93
String_convert::dec2double (string dec_string)
96
95
if (!dec_string.length ())
99
int conv = sscanf (dec_string.to_str0 (), "%lf", &d);
98
int conv = sscanf (dec_string.c_str (), "%lf", &d);
105
String_convert::hex2bin (String hex_string, String& bin_string_r)
104
String_convert::hex2bin (string hex_string, string &bin_string_r)
107
106
if (hex_string.length () % 2)
108
107
hex_string = "0" + hex_string;
110
109
bin_string_r = "";
111
Byte const* byte= hex_string.to_bytes ();
113
while (i < hex_string.length ())
110
Byte const *byte = (Byte const*) hex_string.data ();
112
while (i < hex_string.length ())
115
114
int high_i = hex2nibble (*byte++);
116
115
int low_i = hex2nibble (*byte++);
117
116
if (high_i < 0 || low_i < 0)
118
117
return 1; // illegal char
119
bin_string_r += to_string ((char) (high_i << 4 | low_i), 1 );
118
bin_string_r += to_string ((char) (high_i << 4 | low_i), 1);
126
String_convert::hex2bin (String hex_string)
125
String_convert::hex2bin (string hex_string)
129
128
// silly, asserts should alway be "on"!
130
129
// assert (!hex2bin (hex_string, str) );
131
130
int error_i = hex2bin (hex_string, str);
157
String dec_string = to_string (i);
156
string dec_string = to_string (i);
160
159
return to_string (fill_char, length_i - dec_string.length ()) + dec_string;
164
162
// stupido. Should use int_string ()
166
String_convert::unsigned2hex (unsigned u, int length_i, char fill_char)
164
String_convert::unsigned2hex (unsigned u, ssize length, char fill_char)
172
170
#if 1 // both go...
175
str = to_string ((char) ((u % 16)["0123456789abcdef"] ) ) + str;
173
str = to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
179
177
str += int_string (u, "%x"); // hmm. %lx vs. %x -> portability?
182
str = to_string (fill_char, length_i - str.length ()) + str;
183
while ((str.length () > length_i) && (str[ 0 ] == 'f' ) )
184
str = str.cut_string (2, INT_MAX);
180
str = to_string (fill_char, length - str.length ()) + str;
181
while ((str.length () > length) && (str[ 0 ] == 'f'))
182
str = str.substr (2);
190
188
String_convert::int2hex (int i, int length_i, char fill_char)
192
190
return unsigned2hex ((unsigned)i, length_i, fill_char);
196
194
String_convert::nibble2hex_byte (Byte byte)
198
if ((byte & 0x0f) <= 9 )
196
if ((byte & 0x0f) <= 9)
199
197
return (byte & 0x0f) + '0';
201
199
return (byte & 0x0f) - 10 + 'a';
204
Convert an integer to a string
202
Convert an integer to a string
207
#fmt# is a printf style format, default assumes "%d" as format.
210
String_convert::int_string (int i, char const* fmt)
205
#fmt# is a printf style format, default assumes "%d" as format.
208
String_convert::int_string (int i, char const *fmt)
212
210
char buffer[STRING_BUFFER_LEN];
213
211
snprintf (buffer, STRING_BUFFER_LEN,
214
(fmt ? fmt : "%d"), i); // assume radix 10
215
return String (buffer);
212
(fmt ? fmt : "%d"), i); // assume radix 10
213
return string (buffer);
219
String_convert::form_string (char const* format, ...)
217
String_convert::form_string (char const *format, ...)
222
220
va_start (args, format);
223
221
char buffer[STRING_BUFFER_LEN];
224
222
vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
226
return String (buffer);
224
return string (buffer);
230
String_convert::vform_string (char const* format, va_list args)
228
String_convert::vform_string (char const *format, va_list args)
232
230
char buffer[STRING_BUFFER_LEN];
233
231
vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
234
return String (buffer);
232
return string (buffer);
238
Convert a double to a string.
236
Convert a double to a string.
240
@param #fmt# is a printf style format, default assumes "%lf" as format
243
String_convert::double_string (double f, char const* fmt)
238
@param #fmt# is a printf style format, default assumes "%lf" as format
241
String_convert::double_string (double f, char const *fmt)
245
char buf[STRING_BUFFER_LEN];
243
char buf[STRING_BUFFER_LEN];
247
245
snprintf (buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f);
252
Make a string from a single character.
250
Make a string from a single character.
255
#n# is a repetition count, default value is 1
253
#n# is a repetition count, default value is 1
258
256
String_convert::char_string (char c, int n)
260
258
n = n >= 0 ? n : 0;
261
char* ch = new char[ n ];
259
char *ch = new char[ n ];
262
260
memset (ch, c, n);
263
String s ((Byte*)ch, n);
269
268
String_convert::rational_string (Rational r)
271
return r.to_string ();
270
return r.to_string ();
275
274
String_convert::pointer_string (void const *l)
277
276
char buffer[STRING_BUFFER_LEN];
278
snprintf (buffer, STRING_BUFFER_LEN, "%p", l); // assume radix 10
279
return String (buffer);
277
snprintf (buffer, STRING_BUFFER_LEN, "%p", l); // assume radix 10
278
return string (buffer);
283
Convert a double to a string.
282
Convert a double to a string.
286
#n# is the number of nonzero digits
285
#n# is the number of nonzero digits
289
288
String_convert::precision_string (double x, int n)
291
String format = "%." + to_string (0 >? n - 1) + "e";
292
String str = double_string (abs (x), format.to_str0 ());
290
string format = "%." + to_string (max (0, n - 1)) + "e";
291
string str = double_string (abs (x), format.c_str ());
294
int exp = str.right_string (3).to_int ();
295
str = str.left_string (str.length () - 4);
293
int exp = dec2int (str.substr (str.length () - 3));
294
str = str.substr (0, str.length () - 4);
297
296
while (str[str.length () - 1] == '0')
298
str = str.left_string (str.length () - 1);
297
str = str.substr (0, str.length () - 1);
299
298
if (str[str.length () - 1] == '.')
300
str = str.left_string (str.length () - 1);
299
str = str.substr (0, str.length () - 1);
303
302
return (sign (x) > 0 ? str : "-" + str);
305
str = str.left_string (1) + str.cut_string (2, INT_MAX);
304
str = str.substr (0, 1) + str.substr (2);
308
307
str = "0." + to_string ('0', -dot) + str;
309
308
else if (dot >= str.length ())
310
309
str += to_string ('0', dot - str.length ());
311
else if (( dot > 0) && (dot < str.length ()))
312
str = str.left_string (dot) + "." + str.cut_string (dot, INT_MAX);
310
else if ((dot > 0) && (dot < str.length ()))
311
str = str.substr (0, dot) + "." + str.substr (dot);
316
315
return (sign (x) > 0 ? str : "-" + str);
320
String_convert::split (String str, char c)
323
int i = str.index (c);
326
String s = str.left_string (i);
328
while (str[++i] == c)
330
str = str.cut_string (i, INT_MAX);
340
320
String_convert::long_string (long l)
342
322
char s[STRING_BUFFER_LEN];
343
sprintf (s,"%ld", l);
348
String_convert::pad_to (String s, int n)
350
return s + to_string (' ' , (n - s.length ()) >? 0);
323
sprintf (s, "%ld", l);
328
String_convert::unsigned_string (unsigned u)
330
char s[STRING_BUFFER_LEN];
331
sprintf (s, "%u", u);
336
String_convert::pad_to (string s, int n)
338
return s + string (max (int(n - s.length ()), 0), ' ');
342
String_convert::to_upper (string s)
344
return strnupr ((char *)s.c_str (), s.length ());
348
String_convert::to_lower (string s)
350
return strnlwr ((char *)s.c_str (), s.length ());
354
String_convert::reverse (string s)
356
return (char*) memrev ((unsigned char *)s.data (), s.length ());