Прочитать на английском

Поделиться через


Convert.FromBase64String(String) Метод

Определение

Преобразует заданную строку, представляющую двоичные данные в виде цифр в кодировке Base64, в эквивалентный массив 8-разрядных целых чисел без знака.

public static byte[] FromBase64String (string s);

Параметры

s
String

Преобразуемая строка.

Возвращаемое значение

Byte[]

Массив 8-разрядных целых чисел без знака, эквивалентный s.

Исключения

s имеет значение null.

Длина s, не учитывая символы пробелов, не равна нулю и не кратна 4.

-или-

Недопустимый формат s. s содержит символ в кодировке, отличной от Base 64, больше двух символов заполнения или символ, не являющийся пробелом, среди символов заполнения.

Примеры

В следующем примере метод используется ToBase64String(Byte[]) для преобразования массива байтов в строку UUencoded (base-64), а затем вызывает FromBase64String(String) метод для восстановления исходного массива байтов.

using System;

public class Example
{
   public static void Main()
   {
       // Define a byte array.
       byte[] bytes = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
       Console.WriteLine("The byte array: ");
       Console.WriteLine("   {0}\n", BitConverter.ToString(bytes));

       // Convert the array to a base 64 string.
       string s = Convert.ToBase64String(bytes);
       Console.WriteLine("The base 64 string:\n   {0}\n", s);

       // Restore the byte array.
       byte[] newBytes = Convert.FromBase64String(s);
       Console.WriteLine("The restored byte array: ");
       Console.WriteLine("   {0}\n", BitConverter.ToString(newBytes));
   }
}
// The example displays the following output:
//     The byte array:
//        02-04-06-08-0A-0C-0E-10-12-14
//
//     The base 64 string:
//        AgQGCAoMDhASFA==
//
//     The restored byte array:
//        02-04-06-08-0A-0C-0E-10-12-14

Ниже приведен более сложный пример, который создает 20-элементный массив из 32-разрядных целых чисел. Затем метод используется BitConverter.GetBytes(Int32) для преобразования каждого элемента в массив байтов, который сохраняется в соответствующей позиции в буфере путем вызова Array.Copy(Array, Int32, Array, Int32, Int32) метода. Затем этот буфер передается методу ToBase64String(Byte[]) для создания строки UUencoded (base-64). Затем он вызывает FromBase64String(String) метод для декодирования строки UUencoded и вызывает BitConverter.ToInt32 метод для преобразования каждого набора из четырех байтов (размер 32-разрядного целого числа) в целое число. Выходные данные из примера показывают, что исходный массив успешно восстановлен.

using System;

public class Example
{
   public static void Main()
   {
      // Define an array of 20 elements and display it.
      int[] arr = new int[20];
      int value = 1;
      for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++) {
         arr[ctr] = value;
         value = value * 2 + 1;
      }
      DisplayArray(arr);

      // Convert the array of integers to a byte array.
      byte[] bytes = new byte[arr.Length * 4];
      for (int ctr = 0; ctr < arr.Length; ctr++) {
         Array.Copy(BitConverter.GetBytes(arr[ctr]), 0,
                    bytes, ctr * 4, 4);
      }

      // Encode the byte array using Base64 encoding
      String base64 = Convert.ToBase64String(bytes);
      Console.WriteLine("The encoded string: ");
      for (int ctr = 0; ctr <= base64.Length / 50; ctr++)
         Console.WriteLine(base64.Substring(ctr * 50,
                                            ctr * 50 + 50 <= base64.Length
                                               ? 50 : base64.Length - ctr * 50));
      Console.WriteLine();

      // Convert the string back to a byte array.
      byte[] newBytes = Convert.FromBase64String(base64);

      // Convert the byte array back to an integer array.
      int[] newArr = new int[newBytes.Length/4];
      for (int ctr = 0; ctr < newBytes.Length / 4; ctr ++)
         newArr[ctr] = BitConverter.ToInt32(newBytes, ctr * 4);

      DisplayArray(newArr);
   }

   private static void DisplayArray(Array arr)
   {
      Console.WriteLine("The array:");
      Console.Write("{ ");
      for (int ctr = 0; ctr < arr.GetUpperBound(0); ctr++) {
         Console.Write("{0}, ", arr.GetValue(ctr));
         if ((ctr + 1) % 10 == 0)
            Console.Write("\n  ");
      }
      Console.WriteLine("{0} {1}", arr.GetValue(arr.GetUpperBound(0)), "}");
      Console.WriteLine();
   }
}
// The example displays the following output:
// The array:
// { 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023,
//   2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575 }
//
// The encoded string:
// AQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/w
// MAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8H
//
// The array:
// { 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023,
//   2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575 }

Комментарии

s состоит из цифр base-64, пробелов и конечных символов заполнения. Цифры base-64 в порядке возрастания от нуля — это прописные символы "A" до "Z", строчные символы "a" до "z", цифры "0" до "9", а также символы "+" и "/".

Пробелы и их имена Юникода и шестнадцатеричные кодовые точки являются табуляциями (CHARACTER TABULATION, U+0009), newline (LINE FEED, U+000A), возврат каретки (CARRIAGE RETURN, U+000D) и пустой (ПРОБЕЛ, U+0020). Произвольное количество пробелов может отображаться, s так как все пробелы игнорируются.

Бесценный символ "=" используется для заполнения в конце. Конец s может состоять из нуля, одного или двух символов заполнения.

Важно!

Этот FromBase64String метод предназначен для обработки одной строки, содержащей все данные для декодирования. Чтобы декодировать символьные данные base-64 из потока, используйте System.Security.Cryptography.FromBase64Transform класс.

Применяется к

См. также раздел