个人随笔
目录
工具类:Java实现62进制转10进制
2020-09-11 23:04:51

有时候,我们需要短一点的唯一字符串,在我们用雪花算法生成18位的长整形后,需要用转成10位的62进制,这里为什么不选择64进制,因为64进制会含有+-这些特殊字符,因此下面实现的工具类就是62进制的:

  1. /**
  2. * 十进制与62进制互转工具类,如果是64进制,则需要baseDigits 后面加上+-
  3. * @author forever
  4. *
  5. */
  6. public class ConversionUtil {
  7. //这里最后一位用-比较好,因为/比较特殊
  8. private static final String baseDigits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  9. private static final int BASE = baseDigits.length();
  10. //通过余数获取对应的64进制表示
  11. private static final char[] digitsChar = baseDigits.toCharArray();
  12. //这里预留了足够的空位122位
  13. private static final int FAST_SIZE = 'z';
  14. //这个是为了存放字母对应的值,比如-对应63,但是-是45,也就是 digitsIndex[45]=63
  15. //[digitsChar[-]会自动转变成45,这样子十六进制转十进制,就可以获取到前面的数字了。
  16. private static final int[] digitsIndex = new int[FAST_SIZE + 1];
  17. static {
  18. for (int i = 0; i < FAST_SIZE; i++) {
  19. digitsIndex[i] = -1;
  20. }
  21. //构造:a[117]=30这样的数组
  22. for (int i = 0; i < BASE; i++) {
  23. digitsIndex[digitsChar[i]] = i;
  24. }
  25. }
  26. //64进制转十进制
  27. public static long decode(String s) {
  28. long result = 0L;
  29. long multiplier = 1;
  30. for (int pos = s.length() - 1; pos >= 0; pos--) {
  31. int index = getIndex(s, pos);
  32. result += index * multiplier;
  33. multiplier *= BASE;
  34. }
  35. return result;
  36. }
  37. //十进制转64进制
  38. public static String encode(long number) {
  39. if (number < 0)
  40. System.out.println("Number(Base64) must be positive: " + number);
  41. if (number == 0)
  42. return "0";
  43. StringBuilder buf = new StringBuilder();
  44. while (number != 0) {
  45. //获取余数
  46. buf.append(digitsChar[(int) (number % BASE)]);
  47. //剩下的值
  48. number /= BASE;
  49. }
  50. //反转
  51. return buf.reverse().toString();
  52. }
  53. //获取对应的的64进制的值
  54. private static int getIndex(String s, int pos) {
  55. char c = s.charAt(pos);
  56. if (c > FAST_SIZE) {
  57. System.out.println("Unknow character for Base64: " + s);
  58. }
  59. int index = digitsIndex[c];
  60. if (index == -1) {
  61. System.out.println("Unknow character for Base64: " + s);
  62. }
  63. return index;
  64. }
  65. public static void main(String[] args) {
  66. Long l=639208466002477056l;
  67. String str = encode(l);
  68. System.out.println(str);
  69. Long g = decode(str);
  70. System.out.println(g);
  71. }
  72. }
 854

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2