曲径通幽论坛

标题: base64 编码的转换 [打印本页]

作者: beyes    时间: 2014-10-10 15:31
标题: base64 编码的转换
base64 编码,是用 64 个可打印字符来表示二进制数据。这 64 个可打印字符为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

26 个大写字母,26 个小写字母,10 个阿拉伯数字,一个 + 号,一个 / 符号,总共 64 个。


以每 6 个比特位为一个单元来转换,对应上面某个字符。

转换方法

比如要转换小写字符 a (二进制为  0110 0001)。


先拿出前面 6 个位 011000,其值为 24 ,那么对应的的字符是大写 Y 。那么剩下的的 01 要怎么办?答案是要用 0 来补足,于是扩展开来有 010000,其值为 16,对应的字符是大写 Q 。补足了之后,一共产生了 12 个比特位,那计算机里是以字节来表示的,所以应该再补足 0 ,凑成 24 个比特位,即 3 个字节,于是总的有:011000 010000 000000 000000 。这样,后面就多了 2 组 6 比特位,这种通过补足 0 得来的,规定用等于号(=)来代替,因此 a 转换为 base64 后结果为 YQ== 。


再来看另一个例子,转换两个大写字母 BD ,这两个大写字母的二进制表示为: 01000010 01000100 。先每 6 个比特位来分,则有:010000 100100 0100 。前面 2 组(值分别为 16 和 32)可以转换为 Q 和 k 。那么剩下 0100 ,怎么办?依然是补足,添 0 补为 6 位,则有: 010000,其值为 Q。到现在为止,已经有了 18 个比特位,我们应当凑成 3 个字节,即 24 个比特位,因此后面 6 位都为 0,这用一个 = 号来表示。因此最后的转换结果为 QkQ= 。

下图是 Base64 的索引表:
[attach]3803[/attach]

实际上,base64 的转换,我们大可不必费时费力手动去转,网上转换工具大把,如果有兴趣,还可以自己编写一个。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2