static private void SetFromString(BigNumber atm, String value, bool isStrainghtDigitsOnly = false) { SetZero(atm); int p = 0; sbyte sign = 1; int exponent = 0; if (isStrainghtDigitsOnly == false) { value = value.Trim(); // trim whitespace value = value.ToLower(); // convert to lower //value = UtilityHandler.ToLowerFast(value); int cp = value.IndexOf("0x"); // hexadezimalnumber if (cp >= 0) { value = value.Substring(cp + 2, value.Length - (cp + 2)); BigNumber.SetFromHexString(atm, value); return; } cp = value.IndexOf("%"); // binary format number if (cp >= 0) { value = value.Substring(cp + 1, value.Length - (cp + 1)); BigNumber.SetFromBinaryString(atm, value); return; } cp = value.IndexOf("e"); if (cp > 0) // e cannot be leading { String ex = value.Substring(cp + 1, value.Length - (cp + 1)); exponent = Convert.ToInt32(ex); value = value.Substring(0, cp); } } if (value.Contains("+")) { value = value.Replace("+", ""); // remove optional '+' character } else if (value.Contains("-")) { sign = -1; value = value.Replace("-", ""); } value = value.Replace(",", "."); int j = value.IndexOf("."); if (j == -1) { value = value + '.'; j = value.IndexOf("."); } if (j > 0) { exponent += j; value = value.Replace(".", ""); } int i = value.Length; atm.dataLength = i; if ((i % 2) != 0) { value = value + '0'; } j = value.Length >> 1; if (value.Length > atm.mantissa.Length) { BigNumber.Expand(atm, atm.dataLength + 28); } byte ch = 0; int zflag = 1; for (i = 0, p = 0; i < j; i++) { ch = (byte)(value[p++] - '0'); if ((ch = (byte)((byte)(10 * ch) + (byte)(value[p++] - '0'))) != 0) { zflag = 0; } if (((int)ch & 0xFF) >= 100) { // Error! SetZero(atm); return; } atm.mantissa[i] = ch; atm.mantissa[i + 1] = 0; } atm.exponent = exponent; atm.signum = sign; if (zflag != 0) { atm.exponent = 0; atm.signum = 0; atm.dataLength = 1; atm.mantissa[0] = 0; } else { Normalize(atm); } }