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
发布于 2011-09-17 11:16:35
Wikipedia's page上的表格很清楚地解释了这一点。
每个3字节包含3×8= 24位。
这24位以Base64编码被编码成4个ASCII字符。这意味着每个ASCII字符携带6位数据。
2^6是64,因此可以使用该表将每个6位映射到一个ASCII字符。
发布于 2011-09-17 11:11:30
这是从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),请找到小于或等于十进制数(即6514029)的64的最大幂。这个幂是64³= 262144。做整数除法6514029 / 262144给出
6514029 / 262133 = 24, remainder = 6514029 - 262133 * 24 = 222573
这意味着base64数字的第一个数字将是第25位(我们从0开始计数),它实际上是y
。
继续将余数作为当前十进制数的过程将生成剩余的数字。通过此过程,您可以将任何基数中的数字转换为任何其他基数。
https://stackoverflow.com/questions/7452184
复制相似问题