📄 encoder7bit.java
字号:
public class Encoder7bit {
/**
* @param args
*/
public static void main(String[] args) {
String url=encode7bit("1||http://wap.gd.monternet.com/reversesubscribe?SessionID=null&SPID=850506&ServiceID=01010038&SPURL=http://sms.mobo99.com/back/fee_jd.jsp?name=00059,,;;3||0,,<go href=\",,\">;;4||10.0.0.172:80,,wap.gd.monternet.com;;1||%res%,,;;3||0,,xid=,,?MISC_U;;1||http://211.136.253.114/PullServlet;xid=%res%?SOD=true&MISC_U=http://sms.mobo99.com/back/fee_jd.jsp?name=00059,,");
// String url=encode7bit("hellohello");
System.out.println(url);
//// String str = "1||http://wap.gd.monternet.com/reversesubscribe?SessionID=null&SPID=850506&ServiceID=01010038&SPURL=http://sms.mobo99.com/back/fee_jd.jsp?name=00059,,;;1||http://wap.gd.monternet.com/reversesubscribe?SessionID=null&SPID=850506&ServiceID=01010038&SPURL=http://sms.mobo99.com/back/fee_jd.jsp?name=00059,,;;3||0,,<go href=\",,\">;;4||&,,&;;4||10.0.0.172:80,,wap.gd.monternet.com;;1||%res%,,;;3||0,,xid=,,?MISC_U;;1||http://211.136.253.114/PullServlet;xid=%res%?SOD=true&MISC_U=http://sms.mobo99.com/back/fee_jd.jsp?name=00059,,";
//// String str7bit = encode7bit(str);
//// System.out.println(str7bit);
System.out.println(decode7bit(url));
}
public static String encode7bit2(String s){
String res="";
String all="";
int len = s.length();
int i=0,j=0,k=0;
String[] oct = new String[len];
String[] bu = new String[len];
for(i=0;i<len;i++){
System.out.print(Integer.toString((int)s.charAt(i))+",");
oct[i]=Integer.toBinaryString((int)s.charAt(i));
if(oct[i].length()<7){
j = 7-oct[i].length();
oct[i]=String.format("%0"+j+"d", 0)+oct[i];
}
System.out.println(oct[i]);
k = i%8;
if(k==0){
bu[i]="";
}else{
bu[i]=oct[i].substring(7-k);
oct[i]=oct[i].substring(0,7-k);
}
}
for(i=0;i<len;i++){
j=i+1;
if(j<len){
all+=bu[j]+oct[i];
}else{
all+=oct[i];
}
}
while(all.length()>0){
j=all.length();
String tmp="";
if(j<8){
tmp=all.substring(0,j);
all="";
}else{
tmp = all.substring(0,8);
all = all.substring(8);
}
k =Integer.parseInt(tmp, 2);
res+=(Integer.toHexString((0x100|k)).substring(1).toUpperCase());
}
return res;
}
public static String decode7bit2(String s){
String res="";
String hex="";
String all="";
int len = s.length();
int i=0,j=0,k=0;
String[] oct = new String[len/2];
String[] bu = new String[len/2];
bu[0]="";
for(i=0,j=0;i<len;i+=2,j++){
hex=s.substring(i,i+2);
oct[j]=Integer.toBinaryString(Integer.parseInt(hex,16));
if(oct[j].length()<8){
k = 8-oct[j].length();
oct[j]=String.format("%0"+k+"d", 0)+oct[j];
}
// System.out.print(oct[j]+":");
k=j%7+1;
int h = k;
if(j==(len/2-1)){
k=0;
oct[j]=Integer.toBinaryString(Integer.parseInt(oct[j],2));
}else{
// System.out.println(k);
bu[j+1]=oct[j].substring(0,k);
oct[j] = oct[j].substring(k);
// oct[j]=Integer.toBinaryString(Integer.parseInt(oct[j].substring(k),2));//oct[j].substring(k);
}
// if(oct[j].equals("0"))
// oct[j]="";
// String tmp = oct[j]+bu[j];
// if(tmp.length()<8){
// int l = 8-tmp.length();
// tmp = String.format("%0"+l+"d", 0)+tmp;
// }
if(h==1){
all+=bu[j]+oct[j];
}else{
all+=oct[j]+bu[j];
}
// System.out.println(oct[j]+","+bu[j]+"-"+k);
// System.out.println(tmp);
// System.out.println(Integer.toString(Integer.parseInt(oct[j]+bu[j], 2)));
}
while(all.length()>0){
j=all.length();
String tmp;
// char c;
if(j<7){
tmp = all.substring(0,j);
all="";
}else{
tmp = all.substring(0,7);
all = all.substring(7);
}
// System.out.println(tmp);
res+=String.valueOf((char)(Integer.parseInt(tmp,2)));
// char c =
}
return res;
}
public static String encode7bit(String src) {
String result = null;
String hex = null;
byte value;
if (src != null && src.length() == src.getBytes().length) {
result = "";
byte left = 0;
byte[] b = src.getBytes();
for (int i = 0, j = 0; i < b.length; i++) {
j = i & 7;
if (j == 0)
left = b[i];
else {
value = (byte) ((b[i] << (8 - j)) | left);
left = (byte) (b[i] >> j);
hex = byteToString((byte) value);
result += hex;
// System.out.print(Integer.toBinaryString((int)(b[i] << (8 - j)))+",");
// System.out.print(Integer.toBinaryString(Integer.parseInt(hex, 16)));
}
if (i == b.length - 1){
result += byteToString(left);
}
// System.out.println(":"+Integer.toBinaryString((int)left));
}
result = result.toUpperCase();
}
return result;
}
public static String decode7bit(String src) {
String result = null;
int[] b;
String temp = null;
byte srcAscii;
byte left = 0;
// System.out.println(src.length() / 2);
if (src != null && src.length() % 2 == 0) {
result = "";
b = new int[src.length() / 2];
temp = src + "0";
for (int i = 0, j = 0, k = 0; i < temp.length() - 2; i += 2, j++) {
b[j] = Integer.parseInt(temp.substring(i, i + 2), 16);
k = j % 7;
srcAscii = (byte) (((b[j] << k) & 0x7F) | left);
// System.out.println((char) srcAscii);
result += (char) srcAscii;
left = (byte) (b[j] >>> (7 - k));
if (k == 6) {
// System.out.println((char) left);
result += (char) left;
left = 0;
}
// System.out.println(i+","+j);
if (j == src.length() / 2){
// System.out.println("end: "+(char) left);
result += (char) left;
}
}
}
return result;
}
public static String byteToString(byte b) {
byte high, low;
byte maskHigh = (byte) 0xf0;
byte maskLow = 0x0f;
high = (byte) ((b & maskHigh) >> 4);
low = (byte) (b & maskLow);
StringBuffer buf = new StringBuffer();
buf.append(findHex(high));
buf.append(findHex(low));
return buf.toString();
}
private static char findHex(byte b) {
int t = (int) b;
t = t < 0 ? t + 16 : t;
if ((0 <= t) && (t <= 9)) {
return (char) (t + '0');
}
return (char) (t - 10 + 'A');
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -