Base64 编码

Time Limit: 1000 ms

Memory Limit: 65535 ms

Description

Base64编码用来将任意的八位字节序列表示成为区分大小写的让人难以理解的形式。

       Base64编码用到了US-ASCII中的一个有65个元素的子集,能表示出可打印字符的其中6位。(额外的第65个字符‘=’,用来做特殊处理)。

       编码过程中,将一个24位的输入作为一个整体,处理成4个字符输出。编码从左向右进行,一个24位的输入是由三个连续的8位字节组成,这些24位被看成是4个连续的6位的正整数,每一个正整数都被转换成Base64字符表中的一个数字。

       每个6位的正整数都是64个字符数组的地址。由此地址确定的字符将会放到输出字符串。

 

Table 1: Base 64 字符表
 
        值 编码         值 编码         值 编码         值 编码
          0 A            17 R            34 i            51 z
          1 B            18 S            35 j            52 0
          2 C            19 T            36 k            53 1
          3 D            20 U            37 l            54 2
          4 E            21 V            38 m            55 3
          5 F            22 W            39 n            56 4
          6 G            23 X            40 o            57 5
          7 H            24 Y            41 p            58 6
          8 I            25 Z            42 q            59 7
          9 J            26 a            43 r            60 8
         10 K            27 b            44 s            61 9
         11 L            28 c            45 t            62 +
         12 M            29 d            46 u            63 /
         13 N            30 e            47 v
         14 O            31 f            48 w          (pad) =
         15 P            32 g            49 x
         16 Q            33 h            50 y

 

       当输入数据的最后少于24bit的时候就需要特殊处理,最后总是能完全编码。当输入串最后少于24位的时候,不足的部分补0。填充的数据用 ‘=’ 来编码,由于所有的输入都是八位的字符,所以只有下列情况发生:

1、  最后剩余的bit数是24的倍数,输出的字符数目将是4的倍数,不会有 ’=’追加。

2、  最后剩余的 bit 数正好为 8 bits,此时在编码串后追加两个 ‘=’ 字符。

3、  最后剩余的 bit 数正好是 16bits,此时在编码串后追加一个 ‘=’ 字符

 

Input

第一行是一个正整数 T(1 <= T <= 100),表示数据的组数。接着是 T行,每一行为一个待编码的字符串。

Output

对于每一个测试用例,输出相应的编码字符串。

Sample Input

4
What is your name
i
you
yes

Sample Output

V2hhdCBpcyB5b3VyIG5hbWU=
aQ==
eW91
eWVz

Hint

None

Source

2010 summer1

提交代码