A24980. Base64 编码小王在学习信息技术时,对编码产生了浓厚的兴趣,她听老师说Base64 编码是计算机常见的一种编码方式,于是她决定尝试自己编写一个简单的Base64 编码工具。经过她的研究,发现Base64 编码规则是把 3 个字节(24 位)的数据按 6 位一组分成4组(24÷6=4),然后将每组数据分别转换为十进制,根据图 1 将这些十进制数所对应的字符连接,即为Base64编码。以编码字符…
题目描述
Base64 编码
小王在学习信息技术时,对编码产生了浓厚的兴趣,她听老师说Base64 编码是计算机常见的一种编码方式,于是她决定尝试自己编写一个简单的Base64 编码工具。经过她的研究,发现Base64 编码规则是把 3 个字节(24 位)的数据按 6 位一组分成4组(24÷6=4),然后将每组数据分别转换为十进制,根据图 1 将这些十进制数所对应的字符连接,即为Base64编码。

以编码字符“Win”为例,如图 2 所示,字符“Win”对应的 ASCII 编码分别是 87,105,110,分别转换为8位二进制数,按 6 位二进制数分组后再转换成十进制,查找它们对应的字符,得到 “Win”的 Base64编码为“V2lu”。

编写一个 Python 程序,实现上述功能。程序运行时,输入若干个字符(个数必须是 3 的倍数),输出 Base64 编码。实现上述功能的 Python 代码如下,请在划线处填入合适的代码。
s1=input("请输入编码字符:")
tmp=0
s=""
ans=""
Base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
for x in s1:
①
t=""
for i in range(8): #将十进制数 n 转换为 8 位二进制
r=n%2
②
n=n//2
s=s+t
for i in range(len(s)): #6位二进制一组转换成十进制,查找 Base64 对应字符
③
if i%6==5:
ans=ans+Base64[tmp]
④
print("Base64编码:",ans)参考答案
s1=input("请输入编码字符:")
tmp=0
s=""
ans=""
Base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
for x in s1:
n=ord(x)
t=""
for i in range(8): #将十进制数 n 转换为 8 位二进制
r=n%2
t=str(r)+t
n=n//2
s=s+t
for i in range(len(s)): #6位二进制一组转换成十进制,查找 Base64 对应字符
tmp=tmp*2+int(s[i])
if i%6==5:
ans=ans+Base64[tmp]
tmp=0
print("Base64编码:",ans)答案解析
评分标准:
(1)n=ord(x) 或等效答案;(2分)
(2)t=str(r)+t 或等效答案;(2分)
(3)tmp=tmp*2+int(s[i]) 或 tmp=tmp*2+ord(s[i])-ord('0') 或等效答案;(3分)
(4)tmp=0 或等效答案。(3分)
说明:①处应逐个获取编码字符的ASCII编码,再接下来的for循环中转换为8位二进制,除基取余逆序排列,因此②处应是逆序排列,答案是str(r)+t。每次循环将每个编码字符转换为八位二进制。③处应该将②处转换的所有二进制六位一组转换为十进制,所以③处应该是按权相加转换为十进制即可。④处,实现6位一组的功能,将得到的十进制转换为相应的Base64编码,之后转换下一个6位一组,临时变量tmp清0。