YoushouldhavereceivedcopiesoftheGNUGeneralPublicLicenseandthe GNULesserGeneralPublicLicensealongwiththeGNUMPLibrary.Ifnot,
see https://www.gnu.org/licenses/. */
int
mpz_set_str (mpz_ptr x, constchar *str, int base)
{
size_t str_size; char *s, *begs;
size_t i;
mp_size_t xsize; int c; int negative; constunsignedchar *digit_value;
TMP_DECL;
digit_value = digit_value_tab; if (base > 36)
{ /* For bases > 36, use the collating sequence
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. */
digit_value += 208; if (UNLIKELY (base > 62)) return -1; /* too large base */
}
/* Skip whitespace. */ do
c = (unsignedchar) *str++; while (isspace (c));
negative = 0; if (c == '-')
{
negative = 1;
c = (unsignedchar) *str++;
}
if (digit_value[c] >= (base == 0 ? 10 : base)) return -1; /* error if no valid digits */
/* If BASE is 0, try to find out the base by looking at the initial
characters. */ if (base == 0)
{
base = 10; if (c == '0')
{
base = 8;
c = (unsignedchar) *str++; if (c == 'x' || c == 'X')
{
base = 16;
c = (unsignedchar) *str++;
} elseif (c == 'b' || c == 'B')
{
base = 2;
c = (unsignedchar) *str++;
}
}
}
/* Skip leading zeros and white space. */ while (c == '0' || isspace (c))
c = (unsignedchar) *str++; /* Make sure the string does not become empty, mpn_set_str would fail. */ if (c == 0)
{
SIZ (x) = 0; return0;
}
/* Remove spaces from the string and convert the result from ASCII to a
byte array. */ for (i = 0; i < str_size; i++)
{ if (!isspace (c))
{ int dig = digit_value[c]; if (UNLIKELY (dig >= base))
{
TMP_FREE; return -1;
}
*s++ = dig;
}
c = (unsignedchar) *str++;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.