2016-12-07 7 views
0

Мне нужно декодировать строку в C#. Алгоритм формируется в значениях HEX. Итак, в C# я думаю, мне нужно преобразовать в массив байтов? Я прав ?. Так что я сделал байтовый массив из строки:Как суммировать существующее значение байтового массива с другим значением HEX в C#?

string Encoded = "ENCODEDSTRINGSOMETHING"; 
      byte[] ba = Encoding.Default.GetBytes (Encoded); 

Теперь мне нужно изменить каждый байт в массиве байт первым, начиная с суммирования шестнадцатеричного значения (0x20) на первые байты и для каждого следующего байта в массиве я должен заменить 0x01 hex от начала шестнадцатеричного значения 0x20 и суммировать его со следующими байтами в моем массиве ba. Затем мне нужно снова преобразовать результат массива байтов в строку и распечатать. В Python это очень просто:

def decode(): 
    strEncoded = "ENCODEDSTRINGSOMETHING" 
    strDecoded = "" 
    counter = 0x20 
    for ch in strEncoded: 
     ch_mod = ord(ch) + counter 
     counter -= 1 
     strDecoded += chr(ch_mod) 
    print ("%s" % strDecoded) 

if __name__ == '__main__': 
    decode() 

Как я могу сделать это на C#? Большое спасибо.

+0

Не могли бы вы дать нам ожидаемый результат этого примера строки 'ENCODEDSTRINGSOMETHING'? – Pikoh

+0

Кроме того, что должно произойти с символами, выходящими за пределы диапазона печати? –

+0

Бен Абрахам. Это нормально, этого не будет) Строки, которые мне нужно декодировать, находятся в диапазоне. – Falconsl

ответ

1

Вот приблизительный план того, как делать то, что вы пытаетесь сделать. Может потребоваться немного изменить его, чтобы он соответствовал вашей проблеме/решению.

public string Encode(string input, int initialOffset = 0x20) 
{ 
    string result = ""; 
    foreach(var c in input) 
    { 
      result += (char)(c + (initialOffset --)); 
    } 
    return result; 
} 
+1

Хорошее и элегантное решение. Поскольку OP не дает нам ожидаемого примера ввода/вывода, я думаю, что это правильно – Pikoh

+0

Awesome. Спасибо – Falconsl

0

Попробуйте этот код:

string Encoded = "ENCODEDSTRINGSOMETHING"; 
byte[] ba = Encoding.Default.GetBytes(Encoded); 

string strDecoded = ""; 
int counter = 0x20; 
foreach (char c in Encoded) 
{ 
    int ch_mod = (int)c+counter; 
    counter -= 1; 
    strDecoded += (char)ch_mod; 
} 
+0

Это работает. Спасибо! – Falconsl

+0

@ Falconsl, если какой-либо из ответов вам помог, вы должны отметить любой из них, как принято. Таким образом, любой другой, кто ищет тот же ответ, знал бы, что делать. – Pikoh

 Смежные вопросы

  • Нет связанных вопросов^_^