Преобразуйте строку в поток

23
задан Adi Lester 7 August 2012 в 18:14
поделиться

3 ответа

Почему Вы преобразовали двоичный файл (изображение) данные к строке? Это не имеет никакого смысла..., если Вы не используете основу 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
        }
40
ответ дан Marc Gravell 29 November 2019 в 01:52
поделиться

Это будет работать? Я понятия не имею, что форматирует Вашу строку, находится в, таким образом, некоторое массирование может быть необходимым.

Dim strAsBytes() as Byte = new System.Text.UTF8Encoding().GetBytes(Text)
Dim ms as New System.IO.MemoryStream(strAsBytes)
2
ответ дан Andrew Rollings 29 November 2019 в 01:52
поделиться

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

необходимо использовать Base64 - как шоу @Marc.

1
ответ дан Community 29 November 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: