了解ToBase64String

时间:2011-09-17 03:06:55

标签: c#

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

我无法得到这次转换的数学。

base64字符串编码表:http://tipsforcdevelopers.blogspot.com/2009/05/difference-between-converttobase64strin.html

2 个答案:

答案 0 :(得分:2)

这是从基数256到基数64的base conversion的特定情况。

要在纸上进行数学计算,首先将数字转换为十进制数。在这里,我转换了两个:

              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

好的,所以这也意味着它们确实是相同的数字。

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

6514029 / 262133 = 24, remainder = 6514029 - 262133 * 24 = 222573

这意味着base64号码的第一个数字将是第25个(我们从0开始计算),这确实是y

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

答案 1 :(得分:2)

Wikipedia's page上的表格解释得很清楚。

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

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

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