python[练习题]:实现Base64编码
要求自己实现算法,不用库。
Base64简介:
Base64是一种用64个字符来表示任意二进制数据的方法。
用记事本打开exe
、jpg
、pdf
这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。
转码过程例子:
3*8=4*6
内存1个字节占8位
转前: s 1 3
先转成ascii:对应 115 49 51
2进制: 01110011 00110001 00110011
6个一组(4组) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所有有了 高位补0
科学计算器输入 00011100 00110011 00000100 00110011
Python实现Base64
1 alphabet=b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 2 def base64(src): 3 ret = bytearray() 4 length = len(src) 5 # r记录补0的个数 6 r = 0 7 for offset in range(0, length,3): 8 if offset + 3 <= length: 9 triple = src[offset:offset+3] 10 else: 11 triple = src[offset:] 12 r = 3 - len(triple) 13 triple = triple + '\x00'*r 14 15 print(triple.encode(),r) 16 b = int.from_bytes(triple.encode(), 'big') 17 18 for i in range(18, -1, -6): 19 if i == 18: 20 index = b >> i 21 else: 22 index = b >>i & 0x3F 23 ret.append(alphabet[index]) 24 25 for i in range(1,r+1): 26 ret[-i] = 0x3D 27 return ret 28 29 print(base64('abcde')) 30 import base64 31 print(base64.b64encode('abcde'.encode())) 32