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

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


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 класс.

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

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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