rewrite radix detection loop as while

This commit is contained in:
Michael Mikonos 2023-10-30 16:20:24 +08:00
parent 0729d88cc8
commit b59a6c0557

View file

@ -15,24 +15,19 @@ I64 Str2I64(U8 *st, I64 radix=10, U8 **_end_ptr=NULL)
st++; st++;
if (*st == '+' || *st == '-') if (*st == '+' || *st == '-')
neg = *st++ == '-'; neg = *st++ == '-';
while (TRUE) while (*st == '0')
switch (*st) {
{ st++;
case '0': ch = ToUpper(*st);
st++; if (ch >= 'B' && (radix <= 10 || ch > 'A' + radix - 11))
ch = ToUpper(*st); switch (ch)
if (ch >= 'B' && (radix <= 10 || ch > 'A' + radix - 11)) {
switch (ch) case 'B': radix = 2; st++; break;
{ case 'O': radix = 8; st++; break;
case 'B': radix = 2; st++; break; case 'D': radix = 10; st++; break;
case 'O': radix = 8; st++; break; case 'X': radix = 16; st++; break;
case 'D': radix = 10; st++; break; }
case 'X': radix = 16; st++; break; }
}
default:
goto ai_cont;
}
ai_cont:
while (ch = ToUpper(*st++)) while (ch = ToUpper(*st++))
{ {
if (radix > 10) if (radix > 10)