C# 理解ToBase64String

C# 理解ToBase64String,c#,C#,我无法理解这种转换背后的数学原理 base64字符串编码表:这是从基256到基64的一种特殊情况 要在纸上计算,首先要把数字转换成十进制。在这里,我将两者都转换为: string name = "cem" byte[] barr = "cem".ToCharArray().Select(p=>Convert.ToByte(p)).ToArray(); string converted = Convert.ToBase64String(barr); // converted will be

我无法理解这种转换背后的数学原理

base64字符串编码表:

这是从基256到基64的一种特殊情况

要在纸上计算,首先要把数字转换成十进制。在这里,我将两者都转换为:

string name = "cem"
byte[] barr = "cem".ToCharArray().Select(p=>Convert.ToByte(p)).ToArray();
string converted = Convert.ToBase64String(barr); // converted will be Y2Vt

  c    e    m
 99  101  109

  Y   2   V   t
 24  54  21  45
好的,这也意味着它们确实是相同的数字

然后,要将十进制数转换为另一个基数(例如,转换为基数64),请找到小于或等于十进制数(即6514029)的最大64次方。该功率为64³=262144。进行整数除法6514029/262144得到

              c               e              m
              99 * 256²       101 * 256¹     109 * 256°
              6488064         25856          109         => sum = 6514029

y             2               v              t
24 * 64³      54 * 64²        21 * 64¹       45 * 64°
6291456       221184          1344           45          => sum = 6514029
这意味着base64数字的第一位数字将是第25位(我们从0开始计数),这实际上是
y

以余数作为当前十进制数继续此过程将生成其余数字。通过此过程,您可以将任何基数中的数字转换为任何其他基数。

这是从基数256到基数64的一种特殊情况

要在纸上计算,首先要把数字转换成十进制。在这里,我将两者都转换为:

string name = "cem"
byte[] barr = "cem".ToCharArray().Select(p=>Convert.ToByte(p)).ToArray();
string converted = Convert.ToBase64String(barr); // converted will be Y2Vt

  c    e    m
 99  101  109

  Y   2   V   t
 24  54  21  45
好的,这也意味着它们确实是相同的数字

然后,要将十进制数转换为另一个基数(例如,转换为基数64),请找到小于或等于十进制数(即6514029)的最大64次方。该功率为64³=262144。进行整数除法6514029/262144得到

              c               e              m
              99 * 256²       101 * 256¹     109 * 256°
              6488064         25856          109         => sum = 6514029

y             2               v              t
24 * 64³      54 * 64²        21 * 64¹       45 * 64°
6291456       221184          1344           45          => sum = 6514029
这意味着base64数字的第一位数字将是第25位(我们从0开始计数),这实际上是
y

以余数作为当前十进制数继续此过程将生成其余数字。通过此过程,您可以将任意基数中的数字转换为任意其他基数。

上的表格对此进行了非常清楚的解释

每3个字节包含3 x 8=24位

这24位在Base64编码中编码为4个ASCII字符。这意味着每个ASCII字符携带6位数据

2^6是64,因此可以使用该表将每个6位映射为ASCII字符。

上面的表格解释得很清楚

每3个字节包含3 x 8=24位

这24位在Base64编码中编码为4个ASCII字符。这意味着每个ASCII字符携带6位数据

2^6是64,因此可以使用该表将每个6位映射为ASCII字符。