Je suis en train d'écrire une classe en C# qui convertit un grand nombre (format string) à tout système de nombre, je trouve ce code à How to convert a gi-normous integer (in string format) to hex format? (C#)Converter numérique (grands Les entiers au format string)
var s = "843370923007003347112437570992242323";
var result = new List<byte>();
result.Add(0);
foreach (char c in s)
{
int val = (int)(c - '0');
for (int i = 0 ; i < result.Count ; i++)
{
int digit = result[i] * 10 + val;
result[i] = (byte)(digit & 0x0F);
val = digit >> 4;
}
if (val != 0)
result.Add((byte)val);
}
var hex = "";
foreach (byte b in result)
hex = "ABCDEF"[ b ] + hex;
Cette code fonctionne aussi pour n'importe quel système numérique (2^n base) avec quelques modifications au code.
Le problème est que je ne comprends pas la logique de l'algorithme (l'instruction for). Quelqu'un peut-il s'il vous plaît expliquer cette partie du code:
for (int i = 0 ; i < result.Count ; i++)
{
int digit = result[i] * 10 + val;
result[i] = (byte)(digit & 0x0F);
val = digit >> 4;
}
if (val != 0)
result.Add((byte)val);
Afin de rendre ce code pour convertir, par exemple, une décimale de chaîne à une base64 de chaîne, je dois changer le masque de sorte qu'il peut calculer six bits , au lieu de seulement quatre pour le système hexadécimal, puis de droite-shift chiffre de 6 pour ajouter l'octet restant à l'octet suivant.
result[i] = (byte)(digit & 0x03F);
val = digit >> 6; // 2^6 = 64
et, enfin, il suffit de changer le look-up table pour imprimer le résultat
hex =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/" [ b ] + hex;
Il est cette ligne dans la boucle for celle que je ne comprends pas tout à fait
int digit = result[i] * 10 + val;
Qu'est-ce que cette ligne, avec la boucle, fait à chaque itération pour chaque octet de résultat? et surtout, pourquoi?
Sorte de comprendre. Disons que la chaîne était juste '8'. Alors digit = 8, résultat [i] = 8, val = 0, pas d'octet ajouté => 8 (1 octet). Le prochain char est 4; le chiffre est 84, le résultat [0] est 5, le val est 4 => 54 (2 octets). – Jiminion
54 hex est 84 décimal. – Jiminion
Bienvenue dans [donc]. J'ai upvoted, pourquoi downvotes les gens? et pourquoi la clôture comme hors-sujet, c'est une question sur 'un algorithme de logiciel'? –