Почему Вы преобразовали двоичный файл (изображение) данные к строке? Это не имеет никакого смысла..., если Вы не используете основу 64?
Так или иначе, для инвертирования, что Вы сделали Вы могли попытаться использовать new MemoryStream(Encoding.UTF8.GetBytes(text))
?
Это создаст новый MemoryStream, запущенный со строкой (через UTF8). Лично, я сомневаюсь, что это будет работать - Вы собираетесь столкнуться с большим кодированием проблем, рассматривающих необработанный двоичный файл как данные UTF8... Я ожидаю, что или чтение или запись (или оба) выдадут исключение.
(редактирование)
я должен добавить, что, чтобы работать с основой 64, просто получить данные как byte[]
, затем звонят Convert.ToBase64String(...)
; и возвращать массив, просто используйте Convert.FromBase64String(...)
.
Ре Ваше редактирование, это точно, что я пытался предупредить о вышеупомянутом... в.NET, строка не просто byte[]
, таким образом, Вы не можете просто заполнить его данными двухуровневого изображения. Много данных просто не будет иметь смысла к кодированию, так мог бы быть бесшумно отброшен (или выданное исключение).
Для обработки необработанного двоичного файла (такого как изображения) как строки необходимо использовать кодировку Base 64; это добавляет размер, как бы то ни было. Обратите внимание, что WebClient
мог бы сделать это более простым, как это представляет byte[]
функциональность непосредственно:
using(WebClient wc = new WebClient()) {
byte[] raw = wc.DownloadData("http://www.google.com/images/nav_logo.png")
//...
}
Так или иначе, с помощью стандарта Stream
подход, вот то, как закодировать и декодировать основу 64:
// ENCODE
// where "s" is our original stream
string base64;
// first I need the data as a byte[]; I'll use
// MemoryStream, as a convenience; if you already
// have the byte[] you can skip this
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = s.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
base64 = Convert.ToBase64String(ms.GetBuffer(), 0, (int) ms.Length);
}
// DECODE
byte[] raw = Convert.FromBase64String(base64);
using (MemoryStream decoded = new MemoryStream(raw))
{
// "decoded" now primed with the binary
}
Это будет работать? Я понятия не имею, что форматирует Вашу строку, находится в, таким образом, некоторое массирование может быть необходимым.
Dim strAsBytes() as Byte = new System.Text.UTF8Encoding().GetBytes(Text)
Dim ms as New System.IO.MemoryStream(strAsBytes)
Преобразование двоичных данных к строке в способе, которым Вы показали, представит его бесполезный. Вы не можете вытянуть его, отсылают. Текст, кодирующий, поливает из шланга его.
необходимо использовать Base64 - как шоу @Marc.