本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Convert.FromBase64CharArray 方法 (Char[], Int32, Int32)

 

将 Unicode 字符数组(它将二进制数据编码为 Base64 数字)的子集转换为等效的 8 位无符号整数数组。 参数指定输入数组的子集以及要转换的元素数。

命名空间:   System
程序集:  mscorlib(位于 mscorlib.dll)

public static byte[] FromBase64CharArray(
	char[] inArray,
	int offset,
	int length
)

参数

inArray
Type: System.Char[]

Unicode 字符数组。

offset
Type: System.Int32

inArray 内的位置。

length
Type: System.Int32

inArray 中要转换的元素数目。

返回值

Type: System.Byte[]

等效于 length 中位于 offset 位置的 inArray 元素的 8 位无符号整数数组。

Exception Condition
ArgumentNullException

inArraynull

ArgumentOutOfRangeException

offsetlength 小于 0。

- 或 -

offsetlength 表示不在 inArray 内的位置。

FormatException

inArray 的长度(忽略空格)不是 0 或 4 的倍数。

- 或 -

inArray 的格式无效。 inArray 包含非 base 64 字符、两个以上的填充字符或者在填充字符中包含非空格字符。

inArray由组成 base 64 数字、 空白字符和尾随填充字符。 从零开始的升序 base 64 数字是否为大写字符"A"到"Z"、 小写字符"a"到"z"、 数字"0"到"9"和符号"+"和"/"。

空白字符,其 Unicode 名称和十六进制码位,将选项卡 (字符表,U + 0009),换行符 (换行符,U + 000A) 回车 (回车符、 U + 000d) 和空白 (空格,U + 0020)。 任意数目的空白字符可以出现在inArray因为所有空白字符将被都忽略。

毫无字符、"="、 用于尾随填充。 结束inArray可以包含零个、 一个,或两个填充字符。

System_CAPS_important重要事项

FromBase64CharArray方法旨在处理包含要解码的所有数据的单个字符数组。 要解码的 base-64 字符数据从流,请使用System.Security.Cryptography.FromBase64Transform类。

下面的示例演示了利用FromBase64CharArray(Char[], Int32, Int32)方法进行解码容易被解码 (base 64) 数据,并将其保存为二进制输出。

public void DecodeWithCharArray() {
   System.IO.StreamReader inFile;    
   char[] base64CharArray;

   try {
      inFile = new System.IO.StreamReader(inputFileName,
                              System.Text.Encoding.ASCII);
      base64CharArray = new char[inFile.BaseStream.Length];
      inFile.Read(base64CharArray, 0, (int)inFile.BaseStream.Length);
      inFile.Close();
   }
   catch (System.Exception exp) {
      // Error creating stream or reading from it.
      System.Console.WriteLine("{0}", exp.Message);
      return;
   }

   // Convert the Base64 UUEncoded input into binary output.
   byte[] binaryData;
   try {
      binaryData = 
         System.Convert.FromBase64CharArray(base64CharArray,
                                    0,
                                    base64CharArray.Length);
   }
   catch ( System.ArgumentNullException ) {
      System.Console.WriteLine("Base 64 character array is null.");
      return;
   }
   catch ( System.FormatException ) {
      System.Console.WriteLine("Base 64 Char Array length is not " +
         "4 or is not an even multiple of 4." );
      return;
   }

   // Write out the decoded data.
   System.IO.FileStream outFile;
   try {
      outFile = new System.IO.FileStream(outputFileName,
                                 System.IO.FileMode.Create,
                                 System.IO.FileAccess.Write);
      outFile.Write(binaryData, 0, binaryData.Length);
      outFile.Close();
   }
   catch (System.Exception exp) {
      // Error creating stream or writing to it.
      System.Console.WriteLine("{0}", exp.Message);
   }
}

下面的示例演示ToBase64CharArray(Byte[], Int32, Int32, Char[], Int32, Base64FormattingOptions)FromBase64CharArray(Char[], Int32, Int32)方法。 输入划分为三个字节数 (24 位) 的组。 因此,每个组由其中每个数字的范围从十进制 0 到 63 的四个 6 位数字组成。 在此示例中,有 85 具有 1 个字节剩余的 3 字节组。 第一个组包含的十六进制值 00、 01 和 02,其生成四个 6 位值等于十进制 0、 0、 4 和 2。 这四个值对应于 base 64 数字、"A"、"A"、"E"和"C"开头的输出。

如果整数 3 字节组不存在,剩下的字节进行有效地填充了零以形成完整的组。 在此示例中,最后一字节的值是十六进制 FF。 第一个 6 位相等到十进制 63,对应于 base 64 数字"/"在输出的末尾,且是下一步的 2 位填充了零以生成十进制的 48,对应于 base 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

*/

通用 Windows 平台
自 8 起可用
.NET Framework
自 1.1 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: