C # hex à ascii

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:

  1. Puisque vous incrémentez i de 2 à chaque itération, vous devez terminer par hexSsortingng.Length - 1 . Cela n’a pas d’importance incrémenter de deux après l’itération finale amènera le compteur au-dessus de la longueur contrôlée indépendamment
  2. Vous prenez le mauvais nombre de caractères dans hexSsortingng .
  3. hs n’est jamais utilisé.
  4. Vous n’ajoutez rien à 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)