Java将String文本转换为base36,将base36转换为hex

时间:2016-06-11 06:37:56

标签: java encoding hex decoding base36

在java中是否有任何api将简单字符串转换为base36 / base10以及从base36 / base10转换为十六进制表示。

示例:input: '-22EEVX' encoding base36 输出:f8 8d 33 23

2 个答案:

答案 0 :(得分:3)

使用Integer的{​​{1}}类和基数参数,以及来自同一班级的toHexString

Integer.toHexString(Integer.parseInt("-22EEVX", 36));

对于base10,它甚至更短(省略基数参数,假定为10):

Integer.toHexString(Integer.parseInt("-22"));

答案 1 :(得分:-1)

它可能对您有用如果您想在base36中编码和解码任何字符串。要在基数10中使用它,请将以下所有36个代码替换为10。

import java.math.BigInteger;

public class Base36 {

public static void main(String[] args) {
    String str = convertHexToBase36(toHex("8978675cyrhrtgdxfawW#$#$@$#"));
    System.out.println(str);
    String back = convertBase36ToHex(str);
    System.out.println(fromHex(back));

}

public static String fromHex(String hex) {
    StringBuilder output = new StringBuilder();
    for (int i = 0; i < hex.length(); i += 2) {
        String str = hex.substring(i, i + 2);
        output.append((char) Integer.parseInt(str, 16));
    }
    return output.toString();
}

public static String convertHexToBase36(String hex) {
    BigInteger big = new BigInteger(hex, 16);
    StringBuilder sb = new StringBuilder(big.toString(36));
    return sb.reverse().toString();
}

public static String convertBase36ToHex(String b36) {
    StringBuilder sb = new StringBuilder(b36);
    BigInteger base = new BigInteger(sb.reverse().toString(), 36);
    return base.toString(16);
}

public static String toHex(String arg) {
    return String.format("%040x", new BigInteger(1, arg.getBytes()));
}
}