Member 14130699 Ответов: 1

Как преобразовать byte[] в string?


Byte[] myKey = AES.generateKey();
form1.RSAObj(RSAObj.Encrypt(myKey, false));


Я получаю ошибки: Аргумент 1: не удается преобразовать из 'byte[] в string', а лучший перегруженный метод match for Form1.RSAObj(string)' имеет некоторые недопустимые аргументы.

Почему это не работает, но это работает?
Byte[] myKey = AES.generateKey();
 form1.RSAObj(RSAObj.ToXmlString(true));


Как я могу решить эту проблему?

Что я уже пробовал:


Richard MacCutchan

Проверьте документацию для рассматриваемых методов. Если метод объявлен как требующий строкового объекта, то вы не можете передать ему массив байтов: это совершенно разные вещи. Некоторое время, потраченное на изучение основ C#, должно прояснить это.

1 Ответов

Рейтинг:
0

OriginalGriff

Байтовые значения-это восьмибитные значения, и это не означает, что они "хорошо" вписываются в строку, которая представляет собой набор значений char. Символы 16-битные, так что вы могли бы подумать, что они подойдут, но ... не все значения char являются допустимыми.

Когда вы преобразуете массив байтов в строку XML, вы создаете версию XML (которая основана на тексте) этого массива байтов, что совсем не одно и то же.
Вы можете преобразовать массив байтов в строку и обратно:

byte[] bytes = ...
string s = System.Text.Encoding.UTF8.GetString(bytes);
...
byte[] bytesAgain = System.Text.Encoding.UTF8.GetBytes(s);
Но это, вероятно, не решит вашу проблему, потому что вполне вероятно, что любой метод, который вы имеете в form1, называется RSAObj который принимает строковый аргумент, требует определенного формата данных в строке - который, скорее всего, будет XML-данными, а не "сырой" строкой.
Взгляните на этот метод и посмотрите, что он с ним делает!