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

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


Convert.ToBase64CharArray Метод

Определение

Преобразует подмножество 8-разрядного целочисленного массива без знака в эквивалентное подмножество массива символов Юникода, закодированного с цифрами base-64.

Перегрузки

ToBase64CharArray(Byte[], Int32, Int32, Char[], Int32, Base64FormattingOptions)

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

ToBase64CharArray(Byte[], Int32, Int32, Char[], Int32)

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

ToBase64CharArray(Byte[], Int32, Int32, Char[], Int32, Base64FormattingOptions)

Исходный код:
Convert.cs
Исходный код:
Convert.cs
Исходный код:
Convert.cs

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

public static int ToBase64CharArray (byte[] inArray, int offsetIn, int length, char[] outArray, int offsetOut, Base64FormattingOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public static int ToBase64CharArray (byte[] inArray, int offsetIn, int length, char[] outArray, int offsetOut, Base64FormattingOptions options);

Параметры

inArray
Byte[]

Входной массив 8-разрядных целых чисел без знака.

offsetIn
Int32

Позиция в inArray.

length
Int32

Количество элементов inArray для преобразования.

outArray
Char[]

Выходной массив символов Юникода.

offsetOut
Int32

Позиция в outArray.

options
Base64FormattingOptions

InsertLineBreaks вставлять разрыв строки каждые 76 символов или None, чтобы не вставлять разрывы строк.

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

32-разрядное целое число со знаком, содержащее количество байтов в outArray.

Атрибуты

Исключения

inArray или outArraynull.

offsetIn, offsetOutили length отрицательно.

-или-

offsetIn плюс length больше длины inArray.

-или-

offsetOut плюс количество возвращаемых элементов больше длины outArray.

options не является допустимым значением Base64FormattingOptions.

Примеры

В следующем примере показан метод ToBase64CharArray. Входные данные делятся на группы из трех байтов (24 бита). Следовательно, каждая группа состоит из четырех 6-разрядных чисел, где каждое число диапазонов от десятичного до 63. В этом примере есть 85 3-байтовых групп с одним оставшимся байтом. Первая группа состоит из шестнадцатеричных значений 00, 01 и 02, которые дают четыре 6-разрядных значения, равные десятичным 0, 0, 4 и 2. Эти четыре значения соответствуют цифрам "A", "A", "E" и "C" в начале выходных данных.

Если целое число 3-байтовых групп не существует, остальные байты эффективно заполняются нулями, чтобы сформировать полную группу. В этом примере значение последнего байта — шестнадцатеричное FF. Первые 6 битов равны десятичным 63, который соответствует базовой-64 цифре "/" в конце выходных данных, а следующие 2 бита заполнены нулями, чтобы получить десятичную 48 цифру, которая соответствует базовой-64 цифре , "w". Последние два 6-разрядных значения заполняются и соответствуют символу без значения "=".

// This example demonstrates the Convert.ToBase64CharArray() and
//                               Convert.FromBase64CharArray methods

using System;

class Sample
{
    public static void Main()
    {
    byte[] byteArray1 = new byte[256];
    byte[] byteArray2 = new byte[256];
    char[] charArray  = new char[352];
    int charArrayLength;
    string nl = Environment.NewLine;

    string ruler1a = "         1         2         3         4";
    string ruler2a = "1234567890123456789012345678901234567890";
    string ruler3a = "----+----+----+----+----+----+----+----+";
    string ruler1b = "         5         6         7      ";
    string ruler2b = "123456789012345678901234567890123456";
    string ruler3b = "----+----+----+----+----+----+----+-";
    string ruler   = String.Concat(ruler1a, ruler1b, nl,
                                   ruler2a, ruler2b, nl,
                                   ruler3a, ruler3b);

// 1) Initialize and display a Byte array of arbitrary data.
    Console.WriteLine("1) Input: A Byte array of arbitrary data.{0}", nl);
    for (int x = 0; x < byteArray1.Length; x++)
    {
    byteArray1[x] = (byte)x;
    Console.Write("{0:X2} ", byteArray1[x]);
    if (((x+1)%20) == 0) Console.WriteLine();
    }
    Console.Write("{0}{0}", nl);

// 2) Convert the input Byte array to a Char array, with newlines inserted.
    charArrayLength =
        Convert.ToBase64CharArray(byteArray1, 0, byteArray1.Length,
                                   charArray, 0, Base64FormattingOptions.InsertLineBreaks);
    Console.WriteLine("2) Convert the input Byte array to a Char array with newlines.");
    Console.Write("   Output: A Char array (length = {0}). ", charArrayLength);
    Console.WriteLine("The elements of the array are:{0}", nl);
    Console.WriteLine(ruler);
    Console.WriteLine(new String(charArray));
    Console.WriteLine();

// 3) Convert the Char array back to a Byte array.
    Console.WriteLine("3) Convert the Char array to an output Byte array.");
    byteArray2 = Convert.FromBase64CharArray(charArray, 0, charArrayLength);

// 4) Are the input and output Byte arrays equivalent?
    Console.WriteLine("4) The output Byte array is equal to the input Byte array: {0}",
                      ArraysAreEqual(byteArray1, byteArray2));
    }

    public static bool ArraysAreEqual(byte[] a1, byte[] a2)
    {
    if (a1.Length != a2.Length) return false;
    for (int i = 0; i < a1.Length; i++)
        if (a1[i] != a2[i]) return false;
    return true;
    }
}
/*
This example produces the following results:

1) Input: A Byte array of arbitrary data.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B
3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B
8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3
B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7
C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB
DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

2) Convert the input Byte array to a Char array with newlines.
   Output: A Char array (length = 352). The elements of the array are:

         1         2         3         4         5         6         7
1234567890123456789012345678901234567890123456789012345678901234567890123456
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-
AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4
OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx
cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj
5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==

3) Convert the Char array to an output Byte array.
4) The output Byte array is equal to the input Byte array: True

*/

Комментарии

Подмножество элементов length параметра inArray начиная с позиции offsetIn, принимается как числовое значение и преобразуется в подмножество элементов в параметре outArray начиная с позиции offsetOut. Возвращаемое значение указывает количество преобразованных элементов в outArray. Подмножество outArray состоит из базовых 64 цифр.

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

Параметры offset и length являются 32-разрядными номерами со знаком. Параметры offsetIn и offsetOut — это позиции массива на основе нуля.

Важно!

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

Если для параметра options задано значение InsertLineBreaks, а выходные данные преобразования длиннее 76 символов, разрыв строки вставляется каждые 76 символов. Разрыв строки определяется как символ возврата каретки (U+000D), за которым следует символ канала строки (U+000A). Дополнительные сведения см. в статье RFC 2045,<a1/gt;.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 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, 4.8.1
.NET Standard 2.0, 2.1

ToBase64CharArray(Byte[], Int32, Int32, Char[], Int32)

Исходный код:
Convert.cs
Исходный код:
Convert.cs
Исходный код:
Convert.cs

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

public static int ToBase64CharArray (byte[] inArray, int offsetIn, int length, char[] outArray, int offsetOut);

Параметры

inArray
Byte[]

Входной массив 8-разрядных целых чисел без знака.

offsetIn
Int32

Позиция в inArray.

length
Int32

Количество элементов inArray для преобразования.

outArray
Char[]

Выходной массив символов Юникода.

offsetOut
Int32

Позиция в outArray.

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

32-разрядное целое число со знаком, содержащее количество байтов в outArray.

Исключения

inArray или outArraynull.

offsetIn, offsetOutили length отрицательно.

-или-

offsetIn плюс length больше длины inArray.

-или-

offsetOut плюс количество возвращаемых элементов больше длины outArray.

Примеры

В следующем примере показано использование метода ToBase64CharArray в UUencode (кодирование в базе 64) двоичного потока, а затем сохранение кодирования в файле.

public void EncodeWithCharArray() {
   System.IO.FileStream inFile;
   byte[]             binaryData;

   try {
      inFile = new System.IO.FileStream(inputFileName,
                                 System.IO.FileMode.Open,
                                System.IO.FileAccess.Read);
      binaryData = new Byte[inFile.Length];
      long bytesRead = inFile.Read(binaryData, 0,
                           (int) inFile.Length);
      inFile.Close();
   }
   catch (System.Exception exp) {
      // Error creating stream or reading from it.
      System.Console.WriteLine("{0}", exp.Message);
      return;
   }

   // Convert the binary input into Base64 UUEncoded output.
   // Each 3 byte sequence in the source data becomes a 4 byte
   // sequence in the character array.
   long arrayLength = (long) ((4.0d/3.0d) * binaryData.Length);

   // If array length is not divisible by 4, go up to the next
   // multiple of 4.
   if (arrayLength % 4 != 0) {
      arrayLength += 4 - arrayLength % 4;
   }

   char[] base64CharArray = new char[arrayLength];
   try {
      System.Convert.ToBase64CharArray(binaryData,
                               0,
                               binaryData.Length,
                               base64CharArray,
                               0);
   }
   catch (System.ArgumentNullException) {
      System.Console.WriteLine("Binary data array is null.");
      return;
   }
   catch (System.ArgumentOutOfRangeException) {
      System.Console.WriteLine("Char Array is not large enough.");
      return;
   }

   // Write the UUEncoded version to the output file.
   System.IO.StreamWriter outFile;
   try {
      outFile = new System.IO.StreamWriter(outputFileName,
                              false,
                              System.Text.Encoding.ASCII);
      outFile.Write(base64CharArray);
      outFile.Close();
   }
   catch (System.Exception exp) {
      // Error creating stream or writing to it.
      System.Console.WriteLine("{0}", exp.Message);
   }
}

Комментарии

Подмножество элементов lengthinArray начиная с позиции offsetIn, принимается как числовое значение и преобразуется в подмножество элементов в outArray начиная с позиции offsetOut. Возвращаемое значение указывает количество преобразованных элементов в outArray. Подмножество outArray состоит из базовых 64 цифр.

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

Параметры offset и length являются 32-разрядными номерами со знаком. Параметры offsetIn и offsetOut — это позиции массива на основе нуля.

Важно!

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

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

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

.NET 9 и другие версии
Продукт Версии
.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, 8, 9
.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, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0