⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encoder7bit.java

📁 SMS中用到的字符8位转7位
💻 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||&amp;,,&;;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 + -