Chr*_*oom 4 java string encoding decoding character-encoding
给定一组任意字母
String range = "0123456789abcdefghijklmnopABCD#";
Run Code Online (Sandbox Code Playgroud)
我正在寻找2种方法来编码/解码长< - >字符串
String s = encode( range, l );
Run Code Online (Sandbox Code Playgroud)
和
long l = decode( range, s );
Run Code Online (Sandbox Code Playgroud)
所以 decode(range, encode(range, 123456789L)) == 123456789L
如果范围是"0123456789",这是通常的编码方式.
pol*_*nts 13
以下代码可满足您的需求:
static long decode(String s, String symbols) {
final int B = symbols.length();
long num = 0;
for (char ch : s.toCharArray()) {
num *= B;
num += symbols.indexOf(ch);
}
return num;
}
static String encode(long num, String symbols) {
final int B = symbols.length();
StringBuilder sb = new StringBuilder();
while (num != 0) {
sb.append(symbols.charAt((int) (num % B)));
num /= B;
}
return sb.reverse().toString();
}
public static void main(String[] args) {
String range = "0123456789abcdefghijklmnopABCD#";
System.out.println(decode(encode(123456789L, range), range));
// prints "123456789"
System.out.println(encode(255L, "0123456789ABCDEF"));
// prints "FF"
System.out.println(decode("100", "01234567"));
// prints "64"
}
Run Code Online (Sandbox Code Playgroud)
请注意,这实际上是使用自定义符号集进行基本转换.