题目描述
Gakkipan最近和一个AI助手小爱同学相爱了,但是他发现小爱同学只懂得base64编码的语言,总是向他说类似QXJlIHlvdSBPSz8=这样的话,他们无法互相沟通,所以Gakkipan决定写一个翻译器,把base64编码和常用的ASCII编码互相转换。
以下是对Base64编码过程的解释
当由一段文本由Base64编码时,一般看起来像下面这样(上下分别是ASCII串和编码后的Base64串)
TheWorld
VGhlV29ybGQ=
在上面的文本中,The的编码结果是VGhl。以ASCII编码,字符'T','h','e'的ASCII字符值为84,104和101,它们的8位二进制值为01010100,01101000和01100101这三个值连接在一起形成一个24位字符串,结果为010101000110100001100101。
以每6位为一组,从左到右切分,并转换为单独的数字(这样最终可以产生4个数字),然后将它们转换为它们的对应的Base64编码字符。 Base64索引表是
0123456789012345678901234567890123456789012345678901234567890123
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
在上面的例子中,字符串010101000110100001100101被分为四个部分010101,000110,100001和100101,并转换成整数21,6,33和37.然后我们在索引表中找到它们,得到V,G,h,l 。
当要编码的字节数不能被3整除时(也就是说,如果最后一个24比特位的块只有一个或两个字节的输入时),则执行以下操作:
在二进制字符串后方不断添加0比特直到总长度为6的倍数时停止,因此,如果最后只有一个字节剩余,则有8个有效二进制位,在后面补0直到长度达到12,如果有两个字节剩余,则有16个有效二进制位,在后面补0直到长度为18。在完成转换后,如果依然不够4个字符,在转换后的串末尾添加'='字符以使最后一个块包含四个base64字符。
例如,base64(A)= QQ==,base64(AA)= QUE=。
文件输入
输入一个T,表示需要转换的字符串数
接下来T行,每行两个字符串,第一个字符串为encode或者decode,表示把字符串编码为base64编码,或者解码base64编码的字符串
第二个字符串为待转换的字符串,可能为base64或者ASCII编码
文件输出
输出T行,每行是编码后的base64串,或者解码后的ASCII串
输入样例
2
encode TheWorld
decode VGhlV29ybGQ=
输出样例
VGhlV29ybGQ=
TheWorld
数据规模
对于20%的数据,待编码的ASCII字符串长度是3的倍数,只有编码
对于20%的数据,只有编码
对于20%的数据,待解码的base64字符串末尾没有'='符号,只有解码
对于20%的数据,只有解码
对于前100%的数据,T<=1000,字符串长度<=1000,所有待解码的base64串长度保证是4的倍数,字符串只由大小写字母及数字构成