Discuss / Python / 请问下各位大佬,怎么理解下面这句话

请问下各位大佬,怎么理解下面这句话

Topic source

greatzues

#1 Created at ... [Delete] [Delete and Lock User]

如果编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。 因为我算了下老师给的例子:

import base64
base64.b64encode(b'binary\x00string')
# return -> b'YmluYXJ5AHN0cmluZw=='
base64.b64decode(b'YmluYXJ5AHN0cmluZw==')
# return -> b'binary\x00string'

1.明明b'binary\x00string'binary和string都已经是3的倍数,为什么还要加\x00,而且还是中间,为什么不是加在末尾?

但返回值YmluYXJ5AHN0cmluZw==,确实是4的倍数,一直没搞懂,希望大佬们能帮一下,非常感谢!

\x00是一个字节,相当于总共13字节,所以编码需要补两个字节,补零是编码时候自动加的

base64.b64encode(b'binary\x00string')中的\x00是老师自己编码时候加的,是用户自己想表示此处是一个字节,而不是这句话‘如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。’的应用,不是3的倍数时候,是默认自动加的,你是看不见的,也不需要人为的去操作

所以b'binary\x00string'只有13个字节,不是3的倍数,base64在编码的时候会自动加上两个字节0 即\x00(这个是用16进制表示的一个字节0)


  • 1

Reply