J'essaie de convertir une chaîne hexadécimale en ASCII, en utilisant ceci:
public void ConvertHex(String hexString)
{
StringBuilder sb = new StringBuilder();
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 j'obtiens une exception out or bounds, je suis sûr que c'est une erreur flagrante mais un autre code que j'ai essayé ne fonctionne pas non plus. Qu'est-ce que je fais mal?
Ce code convertira la chaîne hexadécimale en ASCII, vous pouvez copier coller ceci dans une classe et l'utiliser sans instancer
public static string ConvertHex(String hexString)
{
try
{
string ascii = string.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;
}
Notes
2
= Le non. des caractères hexString utilisés pour représenter un caractère ASCII.
System.Convert.ToUInt32(hs, 16)
= "convertir les sous-chaînes hexadécimales de base 16 en un entier 32 bits non signé"
Il y a quatre trois problèmes ici:
i
de 2 à chaque itération, vous devez terminer à hexString.Length - 1
.hexString
.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
).
String hs = hexString.Substring(i, i + 2);
System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
Remarquez-vous que vous n'utilisez jamais hs
??
Et que vous convertissez les 2 premiers caractères encore et encore?
Puisque 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)