编码和解码 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
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