Подтвердить что ты не робот

С# 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);
}

но я получаю исключение или ограничение, я уверен, что его вопиющая ошибка, но другой код, который я попробовал, тоже не работает. Что я делаю неправильно?

4b9b3361

Ответ 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)