public class StringHex {
//将 ENCODE_BITS = 8 则不支持 汉字的编码, 16支持任意字符的编码
private static final int ENCODE_BITS = 16;
public StringHex() {
}
public static void main(String[] args) {
//为了支持全部的unicode字符 应该用16位来存放字符的二进制代码
String test = "@dasd&^%$#$%#@#$@#$你哈啊卡仕达是的";
System.out.println("Input String: " + test);
int [] is = StringHex.stringToInts(test);
System.out.print("Encode arrays: ");
for(int j: is) {
System.out.print(j);
}
System.out.println("\nDecode String: " + StringHex.intsToString(is));
}
public static String intsToString(int [] ints) {
int [] ts = new int [StringHex.ENCODE_BITS];
StringBuffer sb = new StringBuffer();
for(int i = 0; i < ints.length / StringHex.ENCODE_BITS ; i ++) {
int j = i * StringHex.ENCODE_BITS;
for(int k = j; k < j + StringHex.ENCODE_BITS; k ++) {
ts[k - j] = ints[k];
}
sb.append(StringHex.intsToChar(ts));
}
return sb.toString();
}
public static int[] stringToInts(String dist) {
int len = dist.length();
int [] ints = new int[StringHex.ENCODE_BITS * len];
for(int i = 0; i < len; i ++) {
char [] cs = StringHex.charToInts(dist.charAt(i)).toCharArray();
int j = i * StringHex.ENCODE_BITS;
for(int k = j; k < j + StringHex.ENCODE_BITS; k ++) {
ints[k] = Integer.parseInt(cs[k - j] + "");
}
}
return ints;
}
public static String charToInts(char c) {
String bin = Integer.toBinaryString(c);
int len = StringHex.ENCODE_BITS - bin.length();
for (int i = 1; i <= len; i++) {
bin = "0" + bin;
}
return bin;
}
public static char intsToChar(int[] ints) {
int codePoint = 0;
for (int i = ints.length; i >= 1; i--) {
codePoint += Math.pow(2, i - 1) * ints[ints.length - i];
}
return Character.toChars(codePoint)[0];
}
}
温馨提示:答案为网友推荐,仅供参考