размеров/длины совпадают, но только если вы используете кодировку 1: 1.
Во-первых, вы, кажется, немного смущены относительно того, что такое кодировка. Помните, что байты - это просто цифры (диапазон 0-127) и только вещь, сохраняемая компьютером. Эти цифры не означают что-либо для людей, кроме числового значения. Поскольку мы хотели иметь возможность хранить идею текст, нам пришлось придумать способ сопоставить эти числа с читаемыми (и некоторыми не очень читаемыми) символами. Эти методы называются encodings.
Вы кодировали свои байты с кодировкой Base64, которая имеет накладные расходы (приблизительно 1 дополнительный байт на 3 байта ввода в соответствии с Base64 length calculation?). Эти накладные расходы вызывают разницу.
Если вы использовали вместо:
byte[] myBytes = Encoding.ASCII.GetBytes("12345");
string myString = Encoding.ASCII.GetString(myBytes);
Console.WriteLine("Size of byte array: " + myBytes.Length);
Console.WriteLine("Size of string: " + myString.Length);
Вы, как и ожидалось:
Размер массива байтов: 5
Размер строки: 5
причина использовать Base64 (даже с накладными расходами) заключается в том, что он может ncode любой массив байтов в печатные символы (который требуется при попытке отправить их через URL), тогда как кодировка ASCII приведет к непечатаемым символам для нескольких значений.
Также обратите внимание, что символ имеет только два байта в кодировке UTF-16, поэтому ваш номер не удваивается, как вы упомянули в вопросе.
Посмотрите на полученную строку B64 - это будет 8 символов – Plutonix
@Plutonix исправляет это, заканчивая тем, что является 'MTIzNDU ='. Но в этом проблема, я ожидаю, что скрипт будет '12345' не' MTIzNDU = '. Вот где моя путаница. –
Зачем это оставаться неизменным, если вы кодируете его по-другому? Base64! = ASCII – Plutonix