【发布时间】:2016-08-01 13:16:52
【问题描述】:
我知道有一些方法可以使用 toString 转换为 Base36 或使用 encodeToString 转换为 Base64。不过,我想知道怎么做。例如,我正在使用
private static final String BASE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-";
我可以用下面的代码用 int 做到这一点。
private String convertBase(int num) {
String text = "";
int j = (int) Math.ceil(Math.log(num) / Math.log(BASE.length()));
for (int i = 0; i < j; i++) {
text += BASE.charAt(num % BASE.length());
num /= BASE.length();
}
return text;
}
但是byte[]的数值大于long。
【问题讨论】:
-
我建议避免在字符串上使用
Math.ceil、Math.log或+=,但我建议处理负数。顺便说一句,您的程序将为0打印空字符串,而不是尝试一次转换整个byte[],您可以逐步进行。例如三个字节在 base64 中变成 4 个字符。