当前位置:  开发笔记 > 编程语言 > 正文

将字符串编码为Base36

如何解决《将字符串编码为Base36》经验,为你挑选了1个好方法。

目前我正在使用一种算法将一个普通字符串编码为Base36字符串.

我尝试了以下但它不起作用.

public static String encode(String str) {
    return new BigInteger(str, 16).toString(36);
}

我想这是因为字符串不仅仅是十六进制字符串.如果我使用字符串"Hello22334!" 在Base36,然后我得到了NumberFormatException.

我的方法是将每个字符转换为数字.将数字转换为十六进制表示,然后将hexstring转换为Base36.

我的方法是否正常还是有更简单或更好的方法?



1> Christoffer ..:

首先,您需要将字符串转换为数字,由一组字节表示.这是你使用编码的.我强烈推荐UTF-8.

然后,您需要将该数字,字节集转换为字符串,基数为36.

byte[] bytes = string.getBytes(StandardCharsets.UTF_8); 
String base36 = new BigInteger(1, bytes).toString(36);

要解码:

byte[] bytes = new Biginteger(base36, 36).toByteArray();
// Thanks to @Alok for pointing out the need to remove leading zeroes.
int zeroPrefixLength = zeroPrefixLength(bytes);
String string = new String(bytes, zeroPrefixLength, bytes.length-zeroPrefixLength, StandardCharsets.UTF_8));

private int zeroPrefixLength(final byte[] bytes) {
    for (int i = 0; i < bytes.length; i++) {
        if (bytes[i] != 0) {
            return i;
        }
    }
    return bytes.length;
}

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有