📄 sqid.java
字号:
package com.common.util.cis;
/**
* Class name Sqid
* 此类为进制转换类
* 十进制/16进制 十进制/32进制 相互转换
* @date 2006-2-5
* @author 刘学军
*/
public class Sqid {
/**
* 从long转换为三十二进制表示的字串,左追加"0",字串总长度num
* 用途:ID存储值
* @param input
* @param num
* @return String
*/
public static String getSqidTewString(long input,int num){
return leftAppendStr(toTewString(input),num);
}
/**
* 从三十二进制表示的字串转换为long,转换不成功返回-1
* @param s
* @return long
*/
public static long getSqidTewParseLong(String s){
return TewParseLong(s);
}
/**
* 从long转换为16进制表示的字串,左追加"0",字串总长度num
* 用途:ID存储值
* @param input
* @param num
* @return String
*/
public static String getSqidHexString(long input,int num){
return leftAppendStr(toHexString(input),num);
}
/**
* 从16进制表示的字串转换为long,转换不成功返回-1
* @param s
* @return long
*/
public static long getSqidHexParseLong(String s){
return HexParseLong(s);
}
/**
* 字串左边追加字符
*
* @param input
* 输入字串
* @param num
* 设定返回字串总长度
* @param chr
* 追加字符
* @return String
*/
public static String leftAppendStr(String input, int num, String chr) {
String output = "";
for (int i = 0; i < num - input.length(); i++) {
output += chr;
}
output += input;
return output;
}
/**
* 字串左边追加"0"
*
* @param input
* @param num
* @return
*/
public static String leftAppendStr(String input, int num) {
return leftAppendStr(input,num,"0");
}
/**
* 返回8位字串左边追加"0"
*
* @param input
* @param num
* @return
*/
public static String leftAppendStr(String input) {
return leftAppendStr(input,8,"0");
}
/**
* radix进制参数,转换整数为字符串形式
*
* @param i
* @param radix 进制
* @return String
*/
public static String toRadixString(long i, int radix) {
switch (radix) {
case 2:
return Long.toBinaryString(i);
case 8:
return Long.toOctalString(i);
case 16:
return Long.toHexString(i);
case 32:
return toUnsignedString(i,5);
}
return "";
}
/**
* 进制形式字符串转为整数,通过radix进制参数,转换整数
*
* @param s
* @param radix 进制
* @return long
*/
public static long parseLong(String s, int radix) {
try {
return Long.parseLong(s, radix);
} catch (NumberFormatException e) {
return -1;
}
}
/**
* 一个整数参数的字符串表示形式返回以十六进制的无符号整数形式
*
* @param s
* @return long
*/
public static long HexParseLong(String s) {
try {
return Long.parseLong(s, 16);
} catch (NumberFormatException e) {
return -1;
}
}
/**
* 以三十二进制的无符号整数形式返回一个整数参数的字符串表示形式。
*
* @param i
* @return String
*/
public static String toTewString(long i) {
return toUnsignedString(i,5);
}
/**
* 一个整数参数的字符串表示形式返回以三十二进制的无符号整数形式
*
* @param s
* @return long
*/
public static long TewParseLong(String s) {
try {
return Long.parseLong(s, 32);
} catch (NumberFormatException e) {
return -1;
}
}
/**
* 以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。
*
* @param i
* @return String
*/
public static String toHexString(long i) {
return Long.toHexString(i);
}
/**
*
* @param i
* 输入值
* @param shift
* 为2的指数 如果16进制则为4
* @return
*/
private static String toUnsignedString(long i, int shift) {
char[] buf = new char[64];
int charPos = 64;
int radix = 1 << shift;
long mask = radix - 1;
do {
buf[--charPos] = digits[(int) (i & mask)];
i >>>= shift;
} while (i != 0);
return new String(buf, charPos, (64 - charPos));
}
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
/*public static void main(String arg[]){
*//**
*
* long 是有符号的64位类型 -9223372036854775808-----9223372036854775807
* 本类实现常见进制与整形的转换
*
* 整数类型是int 。 它是有符号的32位类型,数的范围是-2147483648~2147483647=十六进制7fffffff
* 十六进制8位最大值: 4294967295
*//*
String st0=Sqid.leftAppendStr(Sqid.toRadixString(2147483647,32),8,"0");
System.out.println("/ *********int32********** /");
System.out.println("int 2147483647 最大值32进制8位字串结果:"+st0);
System.out.println("转回结果:"+Sqid.parseLong(st0,32));
System.out.println("/ *********int 16********** /");
String st=Sqid.leftAppendStr(Sqid.toRadixString(2147483647,16),8,"0");
System.out.println("int 2147483647 最大值16进制8位字串结果:"+st);
System.out.println("转回结果:"+Sqid.parseLong(st,16));
System.out.println("/ *********正常转换测试 ********** /");
//String stt=Sqid.leftAppendStr(Sqid.toHexString(num2),8);
String stt=Sqid.leftAppendStr(Sqid.getSqidHexString(2147483647,18));
System.out.println("int 2147483647 的16进制18位字串结果:"+stt);
//System.out.println(Sqid.HexParseInt(stt));
System.out.println("转回结果:"+Sqid.HexParseLong(stt));
System.out.println("");
String stt2=Sqid.leftAppendStr(Sqid.getSqidTewString(2147483647,8));
System.out.println("int 2147483647 的32进制8位字串结果:"+stt2);
//System.out.println(Sqid.HexParseInt(stt));
System.out.println("转回结果:"+Sqid.TewParseLong(stt2));
System.out.println("long 9223372036854775807 的32进制8位字串结果:"+Sqid.getSqidTewString( Long.parseLong("9223372036854775807"),8));
System.out.println("8位字串最大值32进制vvvvvvvv:"+Sqid.TewParseLong("vvvvvvvv"));
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -