util.java

来自「Java version of ABC/HR comparator v0.5. 」· Java 代码 · 共 106 行

JAVA
106
字号
package abchr.crypto;

public class Util {
	public static char[] bytesToChars(byte[] a,boolean bigEndian) {
		char[] result=new char[a.length/2];
		if(bigEndian) {
			for(int i=0;i<result.length;i++) {
				result[i]=(char)((a[i*2]<<8 & 0xFF00)+(a[i*2+1] & 0x00FF));
			}
		} else {
			for(int i=0;i<result.length;i++) {
				result[i]=(char)((char)((a[i*2+1]<<8 & 0xFF00)+(a[i*2] & 0x00FF))+32768);
			}
		}
		return result;
	}

	public static char[] bytesToChars(byte[] a,int offset,int length,boolean bigEndian) {
		char[] result=new char[length/2];
		if(bigEndian) {
			for(int i=0;i<result.length;i++) {
				result[i]=(char)((a[offset+i*2]<<8 & 0xFF00)+(a[offset+i*2+1] & 0x00FF));
			}
		} else {
			for(int i=0;i<result.length;i++) {
				result[i]=(char)((char)((a[offset+i*2+1]<<8 & 0xFF00)+(a[offset+i*2] & 0x00FF))+32768);
			}
		}
		return result;
	}

	public static byte[] charsToBytes(char[] a) {
		byte[] result=new byte[a.length*2];
		for(int i=0;i<a.length;i++) {
			result[2*i]=(byte)(a[i]>>8 & 0x00FF);
			result[2*i+1]=(byte)(a[i] & 0x00FF);
		}
		return result;
	}

	public static void intToByteArray(int i,byte[] b,int offset) {
		b[offset]=(byte)(i>>24);
		b[offset+1]=(byte)((i>>16)&0x000000FF);
		b[offset+2]=(byte)((i>>8)&0x000000FF);
		b[offset+3]=(byte)(i&0x000000FF);
	}

	public static int byteArrayToInt(byte[] b,int offset) {
		return ((b[offset]<<24) & 0xFF000000)+((b[offset+1]<<16) & 0x00FF0000)+((b[offset+2]<<8) & 0x0000FF00)+(b[offset+3] & 0x000000FF);
	}

	public static int[] bytesToInts(byte[] a) {
		int[] result=new int[a.length/4];
		for(int i=0;i<result.length;i++) {
			result[i]=((a[i*4]<<24) & 0xFF000000)+((a[i*4+1]<<16) & 0x00FF0000)+((a[i*4+2]<<8) & 0x0000FF00)+(a[i*4+3] & 0x000000FF);
		}
		return result;
	}

	public static byte[] stringToByteArray(String s) {
		byte[] a=new byte[s.length()*2];
		for(int i=0;i<s.length();i++) {
			a[2*i]=(byte)(s.charAt(i)>>8 & 0x000000FF);
			a[2*i+1]=(byte)(s.charAt(i) & 0x000000FF);
		}
		return a;
	}

	public static String byteArrayToString(byte[] a) {
		StringBuffer out=new StringBuffer(a.length*2+1);
		for(int i=0;i<a.length/2;i++) {
			out.append((char)((a[2*i]<<8 & 0xFF00)+(a[2*i+1] & 0x00FF)));
		}
		return out.toString();
	}

	public static byte[] intsToBytes(int[] a) {
		byte[] result=new byte[a.length*4];
		for(int i=0;i<a.length;i++) {
			result[4*i]=(byte)(a[i]>>24);
			result[4*i+1]=(byte)((a[i]>>16)&0x000000FF);
			result[4*i+2]=(byte)((a[i]>>8)&0x000000FF);
			result[4*i+3]=(byte)(a[i]&0x000000FF);
		}
		return result;
	}

	public static byte[] pad(byte[] data,int m) {
		byte[] result=new byte[8+data.length+((m-data.length%m)%m)];
		intToByteArray(data.length,result,0);
		System.arraycopy(data,0,result,8,data.length);
		return result;
	}

	public static byte[] unpad(byte[] bytes) throws IllegalArgumentException {
		int length=byteArrayToInt(bytes,0);
		if(length>1024*1024){throw new IllegalArgumentException("Invalid length");}
		/*System.out.println("length="+length);
		length=bytes.length-8;*/
		byte[] result=new byte[length];
		System.arraycopy(bytes,8,result,0,length);
		return result;
	}

	private Util(){}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?