Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字节数组编码为base36字符串_Java_Arrays_Kotlin_Encoding_Base36 - Fatal编程技术网

Java 如何将字节数组编码为base36字符串

Java 如何将字节数组编码为base36字符串,java,arrays,kotlin,encoding,base36,Java,Arrays,Kotlin,Encoding,Base36,要将ByteArray编码为Base64,我只需从java.util使用Base64即可。但现在我需要更改代码来创建base36 相反不幸的是,java.util没有这个功能。我需要的是一个函数/方法,接受ByteArray并输出a字符串,其中包含base36表示没有其他更改如删除前导零 这个问题看起来很相似,但我们有两个问题。首先,问题被编辑了,所以我不明白答案。其次,答案使用BigInteger,我担心将ByteArray转换为BigInteger可能会导致信息丢失(如前导零)。 .不同之处

要将ByteArray编码为Base64,我只需从java.util使用Base64即可。但现在我需要更改代码来创建base36 相反不幸的是,java.util没有这个功能。我需要的是一个函数/方法,接受ByteArray输出a字符串,其中包含base36表示没有其他更改如删除前导零

这个问题看起来很相似,但我们有两个问题。首先,问题被编辑了,所以我不明白答案。其次,答案使用BigInteger,我担心将ByteArray转换为BigInteger可能会导致信息丢失(如前导零)。
.

不同之处在于64是精确的位数,而36不是。因此,您需要有效地重复将整个字节数组除以36,将每个余数从右端取为一个数字-使用BigInteger会容易得多,您可能是对的,它会删除前导零:您需要保留它们吗?如果您确实计算了输出字符串的预期长度,请使用BigInteger方法,然后添加所需的任何前导零以弥补预期长度。是的,我需要前导零,因为它不是数字。我不确定是否能猜出预期的长度,同时我正在寻找另一种方法:base64字符串到base36字符串。我认为这是次优的,不必要的步骤,以base64,但也许我找到了更多的解决方案。如果它不是一个数字,为什么它会在地球上使用Base36?这没有任何意义,因为Base36不能以增量方式完成,因为字节是流式传输/处理的。我只能说Base36是一种二进制到文本的编码方式,二进制可以包含所有内容。在我的脑海中,
base36digits=Math.ceil(bytes*Math.log(256)/Math.log(36))
。但是base36听起来好像在这里使用的是错误的编码,所以如果你能找到需要它的原因并切换到其他类似base64的东西,那将是明智的。区别在于64是一个精确的位数,而36不是。因此,您需要有效地重复将整个字节数组除以36,将每个余数从右端取为一个数字-使用BigInteger会容易得多,您可能是对的,它会删除前导零:您需要保留它们吗?如果您确实计算了输出字符串的预期长度,请使用BigInteger方法,然后添加所需的任何前导零以弥补预期长度。是的,我需要前导零,因为它不是数字。我不确定是否能猜出预期的长度,同时我正在寻找另一种方法:base64字符串到base36字符串。我认为这是次优的,不必要的步骤,以base64,但也许我找到了更多的解决方案。如果它不是一个数字,为什么它会在地球上使用Base36?这没有任何意义,因为Base36不能以增量方式完成,因为字节是流式传输/处理的。我只能说Base36是一种二进制到文本的编码方式,二进制可以包含所有内容。在我的脑海中,
base36digits=Math.ceil(bytes*Math.log(256)/Math.log(36))
。但是base36听起来好像在这里使用的是错误的编码,所以如果您能找到为什么需要它,并切换到其他类似base64的东西,那将是明智的。