首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串编码为Base36

将字符串编码为Base36
EN

Stack Overflow用户
提问于 2017-01-13 19:39:07
回答 2查看 13.1K关注 0票数 8

目前,我正在研究一种算法,将包含每个可能字符的普通字符串编码为Base36字符串。

我已经尝试了以下方法,但不起作用。

代码语言:javascript
复制
public static String encode(String str) {
    return new BigInteger(str, 16).toString(36);
}

我猜这是因为字符串不仅仅是十六进制字符串。如果我使用字符串"Hello22334!“在Base36中,我得到了一个NumberFormatException

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

我的方法可以吗?或者有更简单或更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-13 19:45:52

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

然后,您需要将该数字、字节集转换为以36为基数的字符串。

代码语言:javascript
复制
byte[] bytes = string.getBytes(StandardCharsets.UTF_8); 
String base36 = new BigInteger(1, bytes).toString(36);

解码:

代码语言:javascript
复制
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));

代码语言:javascript
复制
private int zeroPrefixLength(final byte[] bytes) {
    for (int i = 0; i < bytes.length; i++) {
        if (bytes[i] != 0) {
            return i;
        }
    }
    return bytes.length;
}
票数 15
EN

Stack Overflow用户

发布于 2021-07-09 04:29:52

从Base10到Base36

代码语言:javascript
复制
public static String toBase36(String str) {
        try {
            return Long.toString(Long.valueOf(str), 36).toUpperCase();
        } catch (NumberFormatException | NullPointerException ex) {
            ex.printStackTrace();
        }
        return null;
    }

从Base36String到Base10

代码语言:javascript
复制
public static String fromBase36(String b36) {
        try {
            BigInteger base = new BigInteger( b36, 36);
            return base.toString(10);
        }catch (Exception e){
             e.printStackTrace();
        }
       return null;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41633821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档