编码和解码 64 如何确定最后几个零只是填充?

How does encode and decode 64 figure out that the last few zeros are mere padding?

https://docs.microsoft.com/en-us/dotnet/api/system.convert.tobase64string?view=net-5.0

它说

If an integral number of 3-byte groups does not exist, the remaining bytes are effectively padded with zeros to form a complete group. In this example, the value of the last byte is hexadecimal FF. The first 6 bits are equal to decimal 63, which corresponds to the base-64 digit "/" at the end of the output, and the next 2 bits are padded with zeros to yield decimal 48, which corresponds to the base-64 digit, "w". The last two 6-bit values are padding and correspond to the valueless padding character, "=".

现在,

假设我发送的字节数组是

0

所以,只有一个字节,即0

那个1字节会被补到000对吧?

所以现在,我们将使用类似 0=== 的编码,因为它需要 base 64 编码中的 4 个字符来编码 3 个字节。

现在,我们要解码它。

我们如何知道原始字节不是 00 或 000,而只是 0?

我一定是漏掉了什么。

So now, we will have something like 0=== as the encoding

3个填充字符是非法的。这意味着 6 位加填充。

然后 0 作为字节值在 Base64 中是 A,所以它将是 AA==

所以第一个 A 有 0 字节的前 6 位,第二个 A 为你的字节贡献了剩下的 2 个 0 位,然后只剩下 4 个 0 位加上填充,不够一秒钟字节.

How do we know that the original byte isn't 00, or 000, but just 0?

AA== 只有 12 位(每个字符 6 位)所以它只能编码 1 字节 => 0

AAA= 有 18 位,足够 2 个字节 => 00

AAAA 有 24 位 = 3 个字节 => 000