+String_convert::nibble2hex_byte (Byte byte)
+{
+ if ((byte & 0x0f) <= 9 )
+ return (byte & 0x0f) + '0';
+ else
+ return (byte & 0x0f) - 10 + 'a';
+}
+/**
+ Convert an integer to a string
+
+ @param
+ #fmt# is a printf style format, default assumes "%d" as format.
+ */
+String
+String_convert::int_string (int i, char const* fmt)
+{
+ char buffer[STRING_BUFFER_LEN];
+ snprintf (buffer, STRING_BUFFER_LEN,
+ (fmt ? fmt : "%d"), i); // assume radix 10
+ return String (buffer);
+}
+
+String
+String_convert::form_string (char const* format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ char buffer[STRING_BUFFER_LEN];
+ vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
+ va_end (args);
+ return String (buffer);
+}
+
+String
+String_convert::vform_string (char const* format, va_list args)
+{
+ char buffer[STRING_BUFFER_LEN];
+ vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
+ return String (buffer);
+}
+
+/**
+ Convert a double to a string.
+
+ @param #fmt# is a printf style format, default assumes "%lf" as format
+ */
+String
+String_convert::double_string (double f, char const* fmt)
+{
+ char buf[STRING_BUFFER_LEN];
+
+ snprintf (buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f);
+ return String (buf);
+}
+
+/**
+Make a string from a single character.
+
+ @param
+ #n# is a repetition count, default value is 1
+ */
+String
+String_convert::char_string (char c, int n)
+{
+ n = n >= 0 ? n : 0;
+ char* ch = new char[ n ];
+ memset (ch, c, n);
+ String s ((Byte*)ch, n);
+ delete[] ch;
+ return s;
+}
+
+String
+String_convert::rational_string (Rational r)
+{
+ return r.to_string ();
+}
+
+String
+String_convert::pointer_string (void const *l)
+{
+ char buffer[STRING_BUFFER_LEN];
+ snprintf (buffer, STRING_BUFFER_LEN, "%p", l); // assume radix 10
+ return String (buffer);
+}
+
+/**
+ Convert a double to a string.
+
+ @param
+ #n# is the number of nonzero digits
+ */
+String
+String_convert::precision_string (double x, int n)
+{
+ String format = "%." + to_string (0 >? n - 1) + "e";
+ String str = double_string (abs (x), format.to_str0 ());
+
+ int exp = str.right_string (3).to_int ();
+ str = str.left_string (str.length () - 4);
+
+ while (str[str.length () - 1] == '0')
+ str = str.left_string (str.length () - 1);
+ if (str[str.length () - 1] == '.')
+ str = str.left_string (str.length () - 1);
+
+ if (exp == 0)
+ return (sign (x) > 0 ? str : "-" + str);
+
+ str = str.left_string (1) + str.cut_string (2, INT_MAX);
+ int dot = 1 + exp;
+ if (dot <= 0)
+ str = "0." + to_string ('0', -dot) + str;
+ else if (dot >= str.length ())
+ str += to_string ('0', dot - str.length ());
+ else if (( dot > 0) && (dot < str.length ()))
+ str = str.left_string (dot) + "." + str.cut_string (dot, INT_MAX);
+ else
+ assert (0);
+
+ return (sign (x) > 0 ? str : "-" + str);
+}
+
+Array<String>
+String_convert::split (String str, char c)
+{
+ Array<String> a;
+ int i = str.index (c);
+ while (i >=0)
+ {
+ String s = str.left_string (i);
+ a.push (s);
+ while (str[++i] == c)
+ ;
+ str = str.cut_string (i, INT_MAX);
+ i = str.index (c);
+ }
+ if (str.length ())
+ a.push (str);
+ return a;
+}
+
+
+String
+String_convert::long_string (long l)
+{
+ char s[STRING_BUFFER_LEN];
+ sprintf (s,"%ld", l);
+ return s;
+}
+
+String
+String_convert::pad_to (String s, int n)