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
答案 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字符。