【发布时间】:2017-05-28 18:41:35
【问题描述】:
目前我正在研究一种算法,将带有每个可能字符的普通字符串编码为 Base36 字符串。
我尝试了以下方法,但它不起作用。
public static String encode(String str) {
return new BigInteger(str, 16).toString(36);
}
我猜这是因为字符串不仅仅是一个十六进制字符串。如果我使用字符串“Hello22334!”在 Base36 中,我得到一个 NumberFormatException。
我的方法是将每个字符转换为数字。将数字转换为十六进制表示,然后将十六进制字符串转换为 Base36。
我的方法可以吗,还是有更简单或更好的方法?
【问题讨论】:
-
我不明白“每个可能的字符”和使用基数为 16 的
BigInteger应该如何组合在一起。您可能希望先将字符串转换为字节并进行转换。请记住,字符串的字节表示取决于所使用的编码,如果您不提供编码,则将使用系统默认值(并且在不同系统上运行时可能会改变)。 -
我刚试了一下,还是不行。问题是,我知道没有可能的解决方案。
-
您可以看看
java.util.Base64是如何实现的,并将其调整为base 36。
标签: java string algorithm biginteger base36