С# hex to ascii
Я пытаюсь преобразовать строку hex в ASCII, используя это:
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);
}
но я получаю исключение или ограничение, я уверен, что его вопиющая ошибка, но другой код, который я попробовал, тоже не работает. Что я делаю неправильно?
Ответы
Ответ 1
Этот код преобразует шестнадцатеричную строку в ASCII, вы можете скопировать ее в класс и использовать без instancing
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;
}
Ответ 2
Существуют три проблемы four:
-
Поскольку вы увеличиваете i
на 2 на каждой итерации, вам нужно завершить работу в hexString.Length - 1
. Это не имеет значения; приращение на два после окончательной итерации приведет к тому, что счетчик превысит отмеченную длину независимо.
- Вы берете неправильное количество символов от
hexString
.
-
hs
никогда не используется.
- Вы не добавляете ничего в
sb
.
Попробуйте следующее:
for (int i = 0; i < hexString.Length; i += 2)
{
string hs = hexString.Substring(i, 2);
sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16)));
}
Обратите внимание, что нет необходимости квалифицировать типы с их пространством имен System
(при условии, что вы указали его в верхней части файла с помощью инструкции using
).
Ответ 3
String hs = hexString.Substring(i, i + 2);
System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
Вы замечаете, что никогда не используете hs
??
И что вы конвертируете первые 2 символа снова и снова?
Ответ 4
Поскольку вы увеличиваете свой индекс на 2, вам нужно остановить цикл за один-конец длины строки. В противном случае ваша последняя итерация цикла попытается прочитать символы за концом строки.
for (int i = 0; i < hexString.Length - 1, i += 2)