@yang12138
2018-10-31T17:10:52.000000Z
字数 1331
阅读 1185
Base64 是一种常用的编码方式——可以把一个字符串编码成另一个看起来像乱码的字符串,当然也可以解码回去。
我们考虑一个字符串,对它进行 Base64 编码,过程如下。
先把字符串每三个字符分组,对于每一组:
其中 Base64 码表(长 64,不包括首尾引号)如下:
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
举个例子,比如一组三个字符为 Man
- 它们对应的 ASCII 码为 77, 97, 110
,
- 分别转成二进制(一个字符 8 位,不够则高位补零)为 01001101, 01100001, 01101110
,
- 重新分组为 6*4 为 010011, 010110, 000101, 101110
,
- 再对应转回十进制 19, 22, 5, 46
。
- 查表(下标从 0 开始)第 19 位,第 22 位... 得到 TWFu
,这组转换完毕。
对于比较长的字符串,我们每次取前三个字符进行上述转换,得到结果;继续向后取三个字符,重复处理。
如果恰好完毕,那编码结束。
如果还剩字符,那么在字符串末尾补 ASCII 为 0 的字符凑够 3 个,设补了 x 个(显然它必定为 1 或 2),
如上述过程处理完毕后,把结果的末 x 个字符变成 =
。
比如 Ma
-> 77, 97, 0(补)
-> 01001101 01000001 00000000
->
010011 010110 000100 000000
-> 19, 22, 4, 0
-> TWEA
-> TWE=
再比如 M
-> 77, 0(补), 0(补)
-> 01001001 00000000 00000000
->
010011 010000 000000 000000
-> 19, 16, 0, 0
-> TQAA
-> TQ==
注意上述补字符的操作之后发生在整个字符串的末尾,最多发生一次。
一个完整的例子,ManManMa
的编码结果是 TWFuTWFuTWE=
。
不过很不幸,你只有很多 Base64 编码后的字符串,你需要解码得到原始的字符串。
若干行,每行一个非空字符串 S 为 Base64 编码后的字符串(保证合法),文末有且仅有一个换行。
数据范围见下。
若干行,每行为答案(解码后的原始字符串),与输入顺序相对应。
文件尾有且仅有一个换行,所以你只需 在每次输出答案后 恰输出一个 换行 即可。
保证每行答案的长度属于区间 [1, 100000]
。
保证答案各行长度总和属于区间 [1, 100000]
。
数据保证每个答案所有字符的 ASCII 码属于区间 [32, 126]
,即“可显示字符”,
或者说,标准美式键盘上能直接打出来的字符(不包括换行,但包括空格)。
cA==
cHU=
cHVt
cHVtcA==
cHVtcGs=
cHVtcGtp
cHVtcGtpbg==
ZGVsaWNpb3VzIHB1bXBraW4=
p
pu
pum
pump
pumpk
pumpki
pumpkin
delicious pumpkin