J’essaie de convertir une chaîne d’hex en ASCII, en utilisant ceci:
public void ConvertHex(Ssortingng hexSsortingng) { SsortingngBuilder sb = new SsortingngBuilder(); for (int i = 0; i < hexString.Length; i += 2) { String hs = hexString.Substring(i, i + 2); System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString(); } String ascii = sb.ToString(); MessageBox.Show(ascii); }
mais je reçois une exception out ou bounds, je suis sûr que c’est une erreur flagrante, mais les autres codes que j’ai essayés ne fonctionnent pas non plus. Qu’est-ce que je fais mal?
Ce code va convertir la chaîne hexadécimale en ASCII, vous pouvez copier-coller cela dans une classe et l’utiliser sans instancer
public static ssortingng ConvertHex(Ssortingng hexSsortingng) { try { ssortingng ascii = ssortingng.Empty; for (int i = 0; i < hexString.Length; i += 2) { String hs = string.Empty; hs = hexString.Substring(i,2); uint decval = System.Convert.ToUInt32(hs, 16); char character = System.Convert.ToChar(decval); ascii += character; } return ascii; } catch (Exception ex) { Console.WriteLine(ex.Message); } return string.Empty; }
Il y a quatre trois problèmes ici:
i
de 2 à chaque itération, vous devez terminer par hexSsortingng.Length - 1
. hexSsortingng
. hs
n’est jamais utilisé. sb
. Essaye ça:
for (int i = 0; i < hexString.Length; i += 2) { string hs = hexString.Substring(i, 2); sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16))); }
Notez qu'il n'est pas nécessaire de qualifier les types avec leur espace de noms, System
(en supposant que vous l'avez référencé en haut du fichier avec une instruction using
).
Ssortingng hs = hexSsortingng.Subssortingng(i, i + 2); System.Convert.ToChar(System.Convert.ToUInt32(hexSsortingng.Subssortingng(0, 2), 16)).ToSsortingng();
Avez-vous remarqué que vous n’utilisez jamais hs
??
Et que vous convertissez encore et encore les 2 premiers caractères?
Comme vous incrémentez votre index de 2, vous devez arrêter votre boucle un avant la fin de la longueur de la chaîne. Sinon, votre dernière itération de la boucle tentera de lire les caractères après la fin de la chaîne.
for (int i = 0; i < hexString.Length - 1, i += 2)