Почему ToBase64String меняет 16-байтовую строку на 24 байта - PullRequest
2 голосов
/ 15 июня 2011

У меня есть следующий код.Когда я проверяю значение переменной i, оно составляет 16 байтов, но затем, когда вывод преобразуется в Base64, это 24 байта.

   byte[] bytOut = ms.GetBuffer();
        int i = 0;
        for (i = 0; i < bytOut.Length; i++)
            if (bytOut[i] == 0)
                break;

        // convert into Base64 so that the result can be used in xml

        return System.Convert.ToBase64String(bytOut, 0, i);

Ожидается ли это?Я пытаюсь сократить объем памяти, и это одна из моих проблем.

Ответы [ 4 ]

2 голосов
/ 26 октября 2013

Base64 выражает входную строку, состоящую из 8-битных байтов, используя 64 читаемых человеком символа (64 символа = 6 бит информации).

Ключом к ответу на ваш вопрос является то, что кодирование работает в 24-битных блоках, поэтому каждые 24 бита или их часть приводят к выводу 4 символов.

16 байт * 8 бит= 128 бит информации

128 бит / 24 бита на блок = 5,333 блока

Таким образом, конечный результат будет 6 блоков или 24 символа.

Дробные фрагменты обрабатываютсясо знаками равенства, которые представляют завершающие «нулевые биты»В вашем случае вывод всегда будет заканчиваться на «==».

2 голосов
/ 15 июня 2011

Да, вы ожидаете увидеть некоторое расширение. Вы представляете свои данные в базе только с 64 символами. Все эти непечатаемые символы ASCII по-прежнему нуждаются в способе кодирования. Таким образом, вы в конечном итоге с небольшим расширением данных.

Вот ссылка, которая объясняет, сколько: Base64: Каков наихудший возможный рост использования пространства?

Изменить: Исходя из вашего комментария выше, если вам нужно уменьшить размер, вы должны посмотреть на сжатие данных, прежде чем шифровать. Это даст вам максимальную выгоду от сжатия. Сжатие зашифрованного двоичного файла не работает.

0 голосов
/ 15 июня 2011

Base64 - отличный способ представить двоичные данные в строке, используя только стандартные печатные символы. Однако это не очень хороший способ представления строковых данных, поскольку он занимает больше символов, чем исходная строка.

0 голосов
/ 15 июня 2011

Это потому, что строка base64 может содержать только 64 символа (и это потому, что она должна отображаться) с другой стороны, а байт содержит 256 символов, поэтому он может содержать больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...