Я пытаюсь поместить значения строки в байтовый массив без изменения символов. Это потому, что строка на самом деле является байтовым представлением данных.
Цель состоит в том, чтобы переместить входную строку в байтовый массив и затем преобразовать байтовый массив, используя:
string result = System.Text.Encoding.UTF8.GetString(data);
Я надеюсь, что кто-то может мне помочь, хотя я знаю, что это не очень хорошее описание.
EDIT:
И, возможно, я должен объяснить, что я работаю над простой формой окон с текстовым полем, где пользователи могут скопировать в нее закодированные данные, а затем нажать «Предварительный просмотр» для просмотра декодированных данных.
EDIT:
Еще немного кода:
(inputText - это текстовое поле)
private void button1_Click(object sender, EventArgs e)
{
string inputString = this.inputText.Text;
byte[] input = new byte[inputString.Length];
for (int i = 0; i < inputString.Length; i++)
{
input[i] = inputString[i];
}
string output = base64Decode(input);
this.inputText.Text = "";
this.inputText.Text = output;
}
Это часть формы окна, включающая в себя текстовое поле. Этот код не работает, потому что он не позволяет мне преобразовывать тип char в байт.
Но если я изменю строку на:
private void button1_Click(object sender, EventArgs e)
{
string inputString = this.inputText.Text;
byte[] input = new byte[inputString.Length];
for (int i = 0; i < inputString.Length; i++)
{
input[i] = (byte)inputString[i];
}
string output = base64Decode(input);
this.inputText.Text = "";
this.inputText.Text = output;
}
Он кодирует значение, и я этого не хочу. Надеюсь, это немного лучше объясняет, что я пытаюсь сделать.
РЕДАКТИРОВАТЬ: функция base64Decode:
public string base64Decode(byte[] data)
{
try
{
string result = System.Text.Encoding.UTF8.GetString(data);
return result;
}
catch (Exception e)
{
throw new Exception("Error in base64Decode" + e.Message);
}
}
Строка не закодирована с использованием base64, просто для ясности. Это просто плохое название от моего имени.
Обратите внимание, что это всего лишь одна строка ввода.
Я понял. Проблема была в том, что я всегда пытался декодировать неправильный формат. Я чувствую себя очень глупо, потому что, когда я опубликовал пример ввода, я увидел, что это должен быть шестнадцатеричный код, и с тех пор это было легко. Я использовал этот сайт для справки:
http://msdn.microsoft.com/en-us/library/bb311038.aspx
Мой код:
public string[] getHexValues(string s)
{
int j = 0;
string[] hex = new String[s.Length/2];
for (int i = 0; i < s.Length-2; i += 2)
{
string temp = s.Substring(i, 2);
this.inputText.Text = temp;
if (temp.Equals("0x")) ;
else
{
hex[j] = temp;
j++;
}
}
return hex;
}
public string convertFromHex(string[] hex)
{
string result = null;
for (int i = 0; i < hex.Length; i++)
{
int value = Convert.ToInt32(hex[i], 16);
result += Char.ConvertFromUtf32(value);
}
return result;
}
Сейчас я чувствую себя довольно глупо, но спасибо всем, кто помог, особенно @Jon Skeet.