Обратный метод преобразования HexValueToStringValue - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь изменить метод, но на самом деле я застрял уже несколько дней.Я почему-то больше не могу обернуть голову вокруг этого фрагмента кода ... Кажется, что-то вроде тупого умственного блока.

public string HexValueToStringValue(string myString, int pattern = 196) {
  pattern = pattern % 0x100;

  string myReturnString = "";
  for (int x = 1; x <= myString.Length; x += 2)
  {
    myReturnString = myReturnString + Conversions.ToString(Strings.Chr(Convert.ToInt32(Strings.Mid(myString, x, 2), 0x10) ^ pattern));

    int test = Convert.ToInt32(Strings.Mid(myString, x, 2), 0x10) + 1;
    pattern = test % 0x100;
  }

  return myReturnString; 
}

Я просто хочу иметь полную противоположность данному методу.Я хочу создать шестнадцатеричную строку из обычной строки, используя данный алгоритм.Буду признателен за любую помощь.

Думаю, сейчас самое время провести рефакторинг этого метода, но я действительно потерял след на этом ...

1 Ответ

0 голосов
/ 22 мая 2018

Я реорганизовал ваш код и написал противоположный метод.

Как я уже писал в комментарии, A ^ B == B ^ A и A ^ B ^ B == A, поэтому test = test ^ pattern; test = pattern ^ test; бесполезен, потому что это эквивалентнодо test = test ^ pattern; test = test ^ pattern, что эквивалентно test = test ^ pattern ^ pattern.

public static string HexValueToStringValue(string hex, int pattern = 196)
{
    pattern = pattern % 0x100;

    var sb = new StringBuilder(hex.Length / 2);

    for (int i = 0; i < hex.Length; i += 2)
    {
        string h = hex.Substring(i, 2);
        int val = Convert.ToInt32(h, 16);
        char ch = (char)(val ^ pattern);
        sb.Append(ch);

        pattern = (val + 1) % 0x100;
    }

    return sb.ToString();
}

public static string StringToHexValue(string str, int pattern = 196)
{
    pattern = pattern % 0x100;

    var sb = new StringBuilder(str.Length * 2);

    for (int i = 0; i < str.Length; i++)
    {
        char ch = str[i];
        int val = ch ^ pattern;
        string h = val.ToString("X2");
        sb.Append(h);

        pattern = (val + 1) % 0x100;
    }

    return sb.ToString();
}
...