Habituellement, cela se fait comme suit:
- résultent init 0
- pour chaque caractère dans la chaîne faire
- résultat = résultat * 10
- obtenir le chiffre du caractère ('0' est 48 ASCII (ou 0x30), donc il suffit de soustraire cela du code ASCII du caractère pour obtenir le chiffre)
- ajouter le chiffre au résultat
- return result
Modifier: Cela fonctionne pour toute base si vous remplacez 10 avec la base correcte et d'ajuster l'obtention du chiffre du caractère correspondant (devrait fonctionner tout comme pour les bases inférieures que 10, mais aurait besoin d'un peu d'ajustement pour les bases plus élevées - comme hexadécimal - puisque les lettres sont séparées des nombres de 7 caractères).
Edit 2: Char à la conversion de la valeur chiffres: caractères '0' à '9' ont des valeurs ASCII 48 à 57 (0x30 à 0x39 en hexa), donc afin de convertir un caractère à sa valeur numérique simple la soustraction est nécessaire. Habituellement, il est fait comme ça (où ord est la fonction qui donne le code ASCII du caractère):
digit = ord(char) - ord('0')
Pour des bases plus grand nombre les lettres sont utilisées comme des « chiffres » (AF en hexa), mais les lettres commencent à partir 65 (0x41 hexa) qui signifie qu'il ya une lacune que nous devons tenir compte:
digit = ord(char) - ord('0')
if digit > 9 then digit -= 7
Exemple: 'B' est 66, donc ord ('B') - ord ('0') = 18. Depuis 18 est plus grand que 9 on soustrait 7 et le résultat final sera 11 - la valeur du 'chiffre' B.
Encore une chose à noter ici - fonctionne uniquement pour les majuscules, donc le nombre doit d'abord être converti en majuscules.
Vous pourriez crack 'src.zip' ouvert et voyez par vous-même (pour une implémentation particulière). –
J'ai mis à jour la réponse avec un exemple sur la soustraction des codes – rslite