Encoding 使用自定义基32编码16字节数组

Encoding 使用自定义基32编码16字节数组,encoding,Encoding,我有一个16字节的数组,我将使用一个可用字符的自定义实现将它编码为一个32进制的字符串表示 我可能遇到的问题是: 16字节的数据是128位,为了检查将字节数组编码为32基将得到多少字符,我需要: 128/5=25.6 我总是从一个16字节的数组中得到26个字符,但是从上面的计算中,这是因为25.6取整为26吗?编码的字符数总是26个还是25个 谢谢将输入填充到块大小。基32编码器的块大小为5位,但为了保持字节对齐,您需要以8的倍数进行处理,最常见的倍数为40 所以现在你有128位的输入要在40位

我有一个16字节的数组,我将使用一个可用字符的自定义实现将它编码为一个32进制的字符串表示

我可能遇到的问题是:

16字节的数据是128位,为了检查将字节数组编码为32基将得到多少字符,我需要:

128/5=25.6

我总是从一个16字节的数组中得到26个字符,但是从上面的计算中,这是因为25.6取整为26吗?编码的字符数总是26个还是25个


谢谢

将输入填充到块大小。基32编码器的块大小为5位,但为了保持字节对齐,您需要以8的倍数进行处理,最常见的倍数为40

所以现在你有128位的输入要在40位的块中处理,它不会被分割,所以你必须把最后的块四舍五入,用零位或其他常数填充。您还必须以某种方式向解码器发送所使用的填充比特数的信号,以便解码器在解码时删除它们

如果您查看Base-64,您将看到,通过以3块为单位处理输入,编码器能够保持字节对齐,并使用“=”控制字符解决填充问题,该字符向解码器发送填充信号


因此,对于128位,您会发现在编码3个块后,您还有8位剩余,并且必须插入32位填充以完成最后的40位块。

如果正确执行,则它将始终为26个字符,否则,如果您有一个完整的大字符串,你怎么知道哪一个小于26?当你说做得正确时,你的意思是基32的编码是否正确?在对16个字节进行编码后,它被“==========”填充,我只是显示了不等号的字符。可以这样做吗?编码和基更改不是加密。谢谢你的回复,我只需要最少的字符数。如果我在编码后修剪填充,这样可以吗?或者在从字符串解码回字节数组时会有其他影响吗?是的,您可以选择向下取整而不是向上取整,但这样会丢失数据。我很困惑,抱歉。。。目前,我在16字节数组中以32为基础,得到26个字符,后跟6=符号。然后我要做的是删除6=符号并显示26个字符。然后在解码时,我加回6=符号,然后可以像以前一样使用数据。这有什么不对?好吧,如果你只想编码128位的输入,这是有道理的。在这种情况下,填充位的数量是一个常数。