Por lo general, esto se hace así:
- resultan init con 0
- para cada carácter en la cadena hacerlo
- resultado = resultado * 10
- obtener el dígito del carácter ('0' es 48 ASCII (o 0x30), de modo que restarlo del código ASCII de caracteres para obtener el dígito)
- agregar el dígito al resultado
- resultado devuelto
Editar: Esto funciona para cualquier base si se reemplaza 10 con la base correcta y ajustar la obtención del dígito del carácter correspondiente (debería funcionar igual que para las bases inferiores de 10, pero necesitaría un poco de ajuste para bases más altas, como hexadecimal, ya que las letras están separadas de los números por 7 caracteres).
Editar 2: Char a dígitos valor de conversión: caracteres '0' a '9' tienen valores ASCII 48 a 57 (0x30 a 0x39 en hexa), por lo que con el fin de convertir un carácter a su valor dígitos un simple resta es necesaria. Por lo general, se hace del modo siguiente (ord es la función que da el código ASCII del carácter):
digit = ord(char) - ord('0')
Para las bases con un número alto de las letras se utilizan como 'cifras' (AF en hexa), pero las cartas se inicia a partir 65 (hexa 0x41) que significa que hay una brecha que tenemos que tener en cuenta:
digit = ord(char) - ord('0')
if digit > 9 then digit -= 7
Ejemplo: 'B' es 66, por lo ord ('B') - ord ('0') = 18. Desde 18 es mayor que 9, restamos 7 y el resultado final será 11 - el valor del 'dígito' B.
Una cosa más a tener en cuenta aquí - th funciona solo para letras mayúsculas, por lo que el número se debe convertir primero a mayúsculas.
usted podría crack open 'src.zip' y compruébalo tú mismo (para una implementación en particular). –
He actualizado la respuesta con un ejemplo sobre la resta de códigos – rslite