java 中 byte Ascii Hex int short 字串之间的互转

之前写过一个C++中ascii码字串、十六进制字串、byte字串之间的互转 的文章  http://blog.csdn.net/jimbo_lee/article/details/10404295


先整一个java常用的byte字串、asciii码字串、十六进制字串的互相转换, 留底以备后用


import android.graphics.Bitmap;
import android.graphics.Matrix;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class StrUtil {
	public static int hexCharToInt(char c) {
		if ((c >= '0') && (c <= '9'))
			return (c - '0');
		if ((c >= 'A') && (c <= 'F'))
			return (c - 'A' + 10);
		if ((c >= 'a') && (c <= 'f'))
			return (c - 'a' + 10);

		throw new RuntimeException("invalid hex char '" + c + "'");
	}

	public static String bytesToAscii(byte[] bytes, int offset, int dateLen) {
		if ((bytes == null) || (bytes.length == 0) || (offset < 0) || (dateLen <= 0)) {
			return null;
		}
		if ((offset >= bytes.length) || (bytes.length - offset < dateLen)) {
			return null;
		}

		String asciiStr = null;
		byte[] data = new byte[dateLen];
		System.arraycopy(bytes, offset, data, 0, dateLen);
		try {
			asciiStr = new String(data, "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
		}
		return asciiStr;
	}

	public static String bytesToAscii(byte[] bytes, int dateLen) {
		return bytesToAscii(bytes, 0, dateLen);
	}

	public static String bytesToAscii(byte[] bytes) {
		return bytesToAscii(bytes, 0, bytes.length);
	}

	public static String bytesToHexString(byte[] bytes, int offset, int len) {
		if (bytes == null)
			return "null!";

		StringBuilder ret = new StringBuilder(2 * len);

		for (int i = 0; i < len; ++i) {
			int b = 0xF & bytes[(offset + i)] >> 4;
			ret.append("0123456789abcdef".charAt(b));
			b = 0xF & bytes[(offset + i)];
			ret.append("0123456789abcdef".charAt(b));
		}

		return ret.toString();
	}

	public static String bytesToHexString(byte[] bytes, int len) {
		return ((bytes == null) ? "null!" : bytesToHexString(bytes, 0, len));
	}

	public static String bytesToHexString(byte[] bytes) {
		return ((bytes == null) ? "null!" : bytesToHexString(bytes, bytes.length));
	}

	public static byte[] hexStringToBytes(String s) {
		if (s == null)
			return null;

		int sz = s.length();
		try {
			byte[] ret = new byte[sz / 2];
			for (int i = 0; i < sz; i += 2) {
				ret[(i / 2)] = (byte) (hexCharToInt(s.charAt(i)) << 4 | hexCharToInt(s.charAt(i + 1)));
			}

			return ret;
		} catch (RuntimeException re) {
		}
		return null;
	}

	public static byte[] shortToBytesLe(short shortValue) {
		byte[] bytes = new byte[2];

		for (int i = 0; i < bytes.length; ++i) {
			bytes[i] = (byte) (shortValue >> i * 8 & 0xFF);
		}

		return bytes;
	}

	public static byte[] shortToBytesBe(short shortValue) {
		byte[] bytes = new byte[2];

		for (int i = 0; i < bytes.length; ++i) {
			bytes[(bytes.length - i - 1)] = (byte) (shortValue >> i * 8 & 0xFF);
		}

		return bytes;
	}

	public static byte[] intToBytesLe(int intValue) {
		byte[] bytes = new byte[4];

		for (int i = 0; i < bytes.length; ++i) {
			bytes[i] = (byte) (intValue >> i * 8 & 0xFF);
		}

		return bytes;
	}

	public static byte[] intToBytesBe(int intValue) {
		byte[] bytes = new byte[4];

		for (int i = 0; i < bytes.length; ++i) {
			bytes[(bytes.length - i - 1)] = (byte) (intValue >> i * 8 & 0xFF);
		}

		return bytes;
	}

	public static int bytesToIntLe(byte[] bytes) {
		if ((bytes == null) || (bytes.length > 4)) {
			throw new RuntimeException("invalid arg");
		}

		int ret = 0;

		for (int i = 0; i < bytes.length; ++i) {
			ret += ((bytes[i] & 0xFF) << i * 8);
		}

		return ret;
	}

	public static int bytesToIntLe(byte[] data, int start, int end) {
		return bytesToIntLe(Arrays.copyOfRange(data, start, end));
	}

	public static int bytesToIntBe(byte[] bytes) {
		if ((bytes == null) || (bytes.length > 4)) {
			throw new RuntimeException("invalid arg");
		}

		int ret = 0;

		for (int i = 0; i < bytes.length; ++i) {
			ret += ((bytes[i] & 0xFF) << (bytes.length - i - 1) * 8);
		}

		return ret;
	}

	public static int bytesToIntBe(byte[] data, int start, int end) {
		return bytesToIntBe(Arrays.copyOfRange(data, start, end));
	}

	public static int bytesToIntLe(byte b0, byte b1, byte b2, byte b3) {
		int ret = 0;

		ret = b0 & 0xFF;
		ret += ((b1 & 0xFF) << 8);
		ret += ((b2 & 0xFF) << 16);
		ret += ((b3 & 0xFF) << 24);

		return ret;
	}

	public static int bytesToIntBe(byte b0, byte b1, byte b2, byte b3) {
		int ret = 0;

		ret = (b0 & 0xFF) << 24;
		ret += ((b1 & 0xFF) << 16);
		ret += ((b2 & 0xFF) << 8);
		ret += (b3 & 0xFF);

		return ret;
	}

	public static void byteArraySetByte(byte[] bytesArray, byte setValue, int index) {
		bytesArray[index] = setValue;
	}

	public static void byteArraySetByte(byte[] bytesArray, int setValue, int index) {
		bytesArray[index] = (byte) (setValue & 0xFF);
	}

	public static void byteArraySetBytes(byte[] bytesArray, byte[] setValues, int index) {
		System.arraycopy(setValues, 0, bytesArray, index, setValues.length);
	}

	public static void byteArraySetWord(byte[] bytesArray, int setValue, int index) {
		bytesArray[index] = (byte) (setValue & 0xFF);
		bytesArray[(index + 1)] = (byte) (setValue >> 8 & 0xFF);
	}

	public static void byteArraySetWordBe(byte[] bytesArray, int setValue, int index) {
		bytesArray[index] = (byte) (setValue >> 8 & 0xFF);
		bytesArray[(index + 1)] = (byte) (setValue & 0xFF);
	}

	public static void byteArraySetInt(byte[] bytesArray, int setValue, int index) {
		bytesArray[index] = (byte) (setValue & 0xFF);
		bytesArray[(index + 1)] = (byte) (setValue >> 8 & 0xFF);
		bytesArray[(index + 2)] = (byte) (setValue >> 16 & 0xFF);
		bytesArray[(index + 3)] = (byte) (setValue >> 24 & 0xFF);
	}

	public static void byteArraySetIntBe(byte[] bytesArray, int setValue, int index) {
		bytesArray[index] = (byte) (setValue >> 24 & 0xFF);
		bytesArray[(index + 1)] = (byte) (setValue >> 16 & 0xFF);
		bytesArray[(index + 2)] = (byte) (setValue >> 8 & 0xFF);
		bytesArray[(index + 3)] = (byte) (setValue & 0xFF);
	}

	public static void delayms(int ms) {
		if (ms <= 0)
			return;
		try {
			Thread.sleep(ms);
		} catch (InterruptedException e) {
		}
	}

	public static Bitmap bitmapRotate(Bitmap b, int degrees) {
		if ((degrees != 0) && (b != null)) {
			Matrix m = new Matrix();
			m.setRotate(degrees, b.getWidth() / 2.0F, b.getHeight() / 2.0F);
			try {
				Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true);

				if (b != b2) {
					b.recycle();
					b = b2;
				}
			} catch (OutOfMemoryError ex) {
			}
		}
		return b;
	}

	public static boolean isAscii(char ch) {
		return (ch <= '');
	}

	public static boolean isAscii(String text) {
		for (int i = 0; i < text.length(); ++i) {
			if (!(isAscii(text.charAt(i)))) {
				return false;
			}
		}
		return true;
	}

	public static boolean hasAsciiChar(String text) {
		for (int i = 0; i < text.length(); ++i) {
			if (isAscii(text.charAt(i))) {
				return true;
			}
		}
		return false;
	}
}


import java.io.ByteArrayOutputStream;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.DESedeKeySpec;

/**
 * 字节、整数、长整数等数据类型之间的拆分和转换。
* 还包括BCD码,十六进制码,网络字节序等等相互转换 * * @author * @version 1.0 */ public class TypeConvert { /** * 字节数组转换成整型。(网络字节序,高字节在前) * * @param b 字节数组。 * @param offset 待转换字节开始的位置。 * @return 整数形式。 */ public final static int byte2int(byte[] b, int offset) { return (b[offset + 3] & 0xff) | ((b[offset + 2] & 0xff) << 8) | ((b[offset + 1] & 0xff) << 16) | ((b[offset] & 0xff) << 24); } /** * 字节数组转换成整型。(网络字节序,高字节在前) * * @param b 字节数组。 * @return 整数形式。 */ public final static int byte2int(byte[] b) { return (b[3] & 0xff) | ((b[2] & 0xff) << 8) | ((b[1] & 0xff) << 16) | ((b[0] & 0xff) << 24); } /** * 低字节在前,高字节在后字节流转换为整型 * * @param buf byte[] * @param offset int * @return int */ public final static int Sbyte2int(byte[] buf, int offset) { // 读取4个. return (buf[offset] & 0xff) | ((buf[offset + 1] << 8) & 0xff00) | (((buf[offset + 2] << 16) & 0xff0000)) | (((buf[offset + 3] << 24) & 0xff000000)); } /** * 低字节在前,高字节在后整型转换为字符串 * * @param n int * @param buf byte[] * @param offset int */ public final static void Sint2byte(int n, byte[] buf, int offset) { buf[offset + 3] = (byte) (n >> 24); buf[offset + 2] = (byte) (n >> 16); buf[offset + 1] = (byte) (n >> 8); buf[offset + 0] = (byte) n; } /** * 整型转换成16进制,,负数最后要在最高位加1就是8 * * @param nInt int * @return 16进制度字符串。 */ public final static String int2hex(int nInt) { int n = nInt, tmp; // 不断的移动,4个分一小段,,移位和与或操作。 char[] bb = new char[8]; for (int i = 0; i < 32; i += 4) { tmp = (int) ((n >> i) & 0x0000000f); tmp = getHex(tmp); bb[7 - i / 4] = (char) tmp; } return new String(bb); } private final static String HEX = "0123456789ABCDEF"; public final static int hex2int(String hex) { int ret = 0; for (int i = 0, len = hex.length(); i < len; i++) { ret = (ret << 8) + HEX.indexOf(hex.charAt(i)); } return ret; } // 默认要求是大写十六进制,否则出错 public final static byte hex2Byte(char hex) { byte b = (byte) HEX.indexOf(hex); return b; } /** * 将字节数组内容按照二进制码打印出来 * * @param buf byte[] * @return String */ public final static String byte2binary(byte[] buf) { int len = buf.length; StringBuilder chars = new StringBuilder(); byte tmp; int inch = 0; int j; for (int i = 0; i < len; i++) { tmp = buf[i]; chars.append(' '); for (j = 7; j >= 0; j--) { inch = ((tmp >> j) & 0x01); if (inch == 0) { chars.append('0'); } else { chars.append('1'); } } } return chars.substring(1); } /** * BCD码转为10进制串(阿拉伯数据)
* * BCD与十进制字符串的转换.
* BCD(Binary Coded Decimal)是用二进制编码表示的十进制数,
* 十进制数采用0~9十个数字,是人们最常用的。在计算机中,同一个数可以用两种BCD格式来表示:
* ①压缩的BCD码 ②非压缩的BCD码
* 压缩的BCD码:
* 压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数用一串BCD码来表示。
* 例如,十进制数59表示成压缩的BCD码为0101 1001,十进制数1946表示成压缩的BCD码为0001 1001 0100 0110。
* 非压缩的BCD码:
* 非压缩的BCD码用8位二进制数表示一个十进制数位,其中低4位是BCD码,高4位是0。
* 例如,十进制数78表示成压缩的BCD码为0111 1000。
* 从键盘输入数据时,计算机接收的是ASCII码,要将ASCII码表示的数转换成BCD码是很简单的,
* 只要把ASCII码的高4位清零即可。反之,如果要把BCD码转换成ASII码,只要把BCD码 "或|"00110000即可。 * * @param bytes BCD码 * @return String 10进制串 */ public static String bcd2Str(byte[] bytes) { if (bytes.length == 0) { return ""; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { int h = ((bytes[i] & 0xff) >> 4) + 48; sb.append((char) h); int l = (bytes[i] & 0x0f) + 48; sb.append((char) l); } return sb.toString(); } /** * 10进制串转为BCD码
* * @param asc 10进制串 * @return byte[] BCD码 */ public static byte[] str2Bcd(String data) { if (data.length() == 0) { return new byte[0]; } String str = data; // 奇数个数字需左补零 if (str.length() % 2 != 0) { str = "0" + str; } ByteArrayOutputStream baos = new ByteArrayOutputStream(); char[] cs = str.toCharArray(); for (int i = 0; i < cs.length; i += 2) { int high = cs[i] - 48; int low = cs[i + 1] - 48; baos.write(high << 4 | low); } return baos.toByteArray(); } /** * 将字节数组内容按照十六进制码打印出来 * * @param buf byte[] * @param split String 分隔符 * @return String */ public final static String bytes2hex(byte[] buf, String split) { if ((split == null) || (split.length() == 0)) { return bytes2hex(buf); } if ((buf == null) || (buf.length == 0)) { return ""; } StringBuilder chars = new StringBuilder(); for (byte tmp : buf) { chars.append(split); int inch = ((tmp >> 4) & 0x0F); inch = getHex(inch); chars.append((char) inch); inch = (tmp & 0x0F); inch = getHex(inch); chars.append((char) inch); } return chars.substring(split.length()); } /** * 将字节数组内容按照十六进制码打印出来 * * @param buf byte[] * @param split String 分隔符 * @return String */ public final static String bytes2hex(byte[] buf) { if ((buf == null) || (buf.length == 0)) { return ""; } StringBuilder chars = new StringBuilder(); for (byte b : buf) { int inch = ((b >> 4) & 0x0F); inch = getHex(inch); chars.append((char) inch); inch = (b & 0x0F); inch = getHex(inch); chars.append((char) inch); } return chars.toString(); } private static int getHex(int inch) { if (inch >= 10) { return inch + 55; } else { return inch + 48; } } public static String byte2hex(byte b) { String hex = ""; int inch = ((b >> 4) & 0x0F); inch = getHex(inch); hex += (char) inch; inch = (b & 0x0F); inch = getHex(inch); hex += (char) inch; return hex; } /** * 将十六进制码字符串转换成字节数组内容 * * @param str String * @return String */ public final static byte[] hex2bytes(String str) { str = str.toUpperCase(); int len = str.length() / 2; byte[] buf = new byte[len]; int inch = 0; for (int i = 0; i < len; i++) { inch = str.charAt(i + i); if (inch >= 65) { buf[i] = (byte) (((inch - 55) << 4) & 0xF0); } else { buf[i] = (byte) (((inch - 48) << 4) & 0xF0); } inch = str.charAt(i + i + 1); if (inch >= 65) { buf[i] = (byte) (buf[i] | ((inch - 55) & 0x0F)); } else { buf[i] = (byte) (buf[i] | ((inch - 48) & 0x0F)); } } return buf; } /*** * 根据实际长度返回,不补任何东西. * * @param aa int * @return String 一个16进制的字符串. */ public final static String int2hexA(int aa) { char[] cc = new char[8]; int len = 0; int tmp = 0; for (int offset = 28; offset >= 0; offset -= 4) { tmp = ((aa >> offset) & 0x0f); if ((tmp == 0) && (len == 0)) { // 开头是0则省略调. continue; } else tmp = getHex(tmp); // 遇到正常字符. // len++; cc[len++] = (char) tmp; } return new String(cc, 0, len); } public final static void main(String[] args) { /* System.out.println(TypeConvert.byte2binary("asdf".getBytes())); System.out.println(TypeConvert.bytes2hex("asdf".getBytes(), " ")); byte[] buf = TypeConvert.hex2bytes("f1234f"); System.out.println(TypeConvert.bytes2hex(buf, "")); System.out.println(TypeConvert.int2hex(255).substring(6));*/ byte[] tmpbytes=binaryTobytes("010001000111010000000000000000000000010100000000000000000000000"); System.out.println(bytes2hex(tmpbytes)); System.out.println(byte2binary(hex2bytes("A23A000002800000"))); } /** * 字节数组转换成长整型。(网络字节序,高字节在前) * * @param b 字节数组。 * @return 长整数形式。 */ public final static long byte2long(byte[] b) { return ((long) b[7] & 0xff) | (((long) b[6] & 0xff) << 8) | (((long) b[5] & 0xff) << 16) | (((long) b[4] & 0xff) << 24) | (((long) b[3] & 0xff) << 32) | (((long) b[2] & 0xff) << 40) | (((long) b[1] & 0xff) << 48) | ((long) b[0] << 56); } /** * 字节数组转换成长整型。(网络字节序,高字节在前) * * @param b byte[] 字节数组。 * @param offset int * @return long 长整数形式。 */ public final static long byte2long(byte[] b, int offset) { return ((long) b[offset + 7] & 0xff) | (((long) b[offset + 6] & 0xff) << 8) | (((long) b[offset + 5] & 0xff) << 16) | (((long) b[offset + 4] & 0xff) << 24) | (((long) b[offset + 3] & 0xff) << 32) | (((long) b[offset + 2] & 0xff) << 40) | (((long) b[offset + 1] & 0xff) << 48) | ((long) b[offset] << 56); } /** * 整型转换成字节。(网络字节序,高字节在前) * * @param n 整数。 * @return 长度为4的字节数组。 */ public final static byte[] int2byte(int n) { byte[] b = new byte[4]; b[0] = (byte) (n >> 24); b[1] = (byte) (n >> 16); b[2] = (byte) (n >> 8); b[3] = (byte) n; return b; } /** * 整型转换成字节。(网络字节序,高字节在前) * * @param n 整数。 * @param buf 存放转换结果的字节数组。 * @param offset 存放位置的偏移地址。 */ public final static void int2byte(int n, byte[] buf, int offset) { buf[offset] = (byte) (n >> 24); buf[offset + 1] = (byte) (n >> 16); buf[offset + 2] = (byte) (n >> 8); buf[offset + 3] = (byte) n; } /** * 短整型转换成字节。(网络字节序,高字节在前) * * @param n 整数。 * @return 长度为4的字节数组。 */ public final static byte[] short2byte(int n) { byte[] b = new byte[2]; b[0] = (byte) (n >> 8); b[1] = (byte) n; return b; } /** * 短整型转换成字节。(网络字节序,高字节在前) * * @param n 整数。 * @param buf 存放转换结果的字节数组。 * @param offset 存放位置的偏移地址。 */ public final static void short2byte(int n, byte[] buf, int offset) { buf[offset] = (byte) (n >> 8); buf[offset + 1] = (byte) n; } /** * 长整型转换成字节。(网络字节序,高字节在前) * * @param n 长整数。 * @return 长度为8的字节数组。 */ public final static byte[] long2byte(long n) { byte[] b = new byte[8]; // b[0]=(byte)(n>>57); // comment by edong 20011203 b[0] = (byte) (n >> 56); b[1] = (byte) (n >> 48); b[2] = (byte) (n >> 40); b[3] = (byte) (n >> 32); b[4] = (byte) (n >> 24); b[5] = (byte) (n >> 16); b[6] = (byte) (n >> 8); b[7] = (byte) n; return b; } /** * 长整型转换成字节。(网络字节序,高字节在前) * * @param n 长整数。 * @param buf 存放转换结果的字节数组。 * @param offset 存放位置的偏移地址。 */ public final static void long2byte(long n, byte[] buf, int offset) { // buf[offset]=(byte)(n>>57); // comment by edong // 20011203 buf[offset] = (byte) (n >> 56); buf[offset + 1] = (byte) (n >> 48); buf[offset + 2] = (byte) (n >> 40); buf[offset + 3] = (byte) (n >> 32); buf[offset + 4] = (byte) (n >> 24); buf[offset + 5] = (byte) (n >> 16); buf[offset + 6] = (byte) (n >> 8); buf[offset + 7] = (byte) n; } // **************低字节在前******************* /** * 长整型转换成字节。(网络字节序,高字节在前) * * @param n 长整数。 * @param buf 存放转换结果的字节数组。 * @param offset 存放位置的偏移地址。 * @author zhangyong 2004-05-27 */ public final static void Slong2byte(long n, byte[] buf, int offset) { buf[offset + 7] = (byte) (n >> 56); buf[offset + 6] = (byte) (n >> 48); buf[offset + 5] = (byte) (n >> 40); buf[offset + 4] = (byte) (n >> 32); buf[offset + 3] = (byte) (n >> 24); buf[offset + 2] = (byte) (n >> 16); buf[offset + 1] = (byte) (n >> 8); buf[offset] = (byte) n; } /** * 整型转换成字节。(网络字节序,低字节在前) * * @param iSource int 整数。 * @param buf byte[] 存放转换结果的字节数组。 * @param offset int 存放位置的偏移地址。 * @return byte[] */ static public byte[] inttobyte(int iSource, byte[] buf, int offset) { buf[offset] = (byte) iSource; buf[offset + 1] = (byte) (iSource >> 8); buf[offset + 2] = (byte) (iSource >> 16); buf[offset + 3] = (byte) (iSource >> 24); return (buf); } /** * 短整数转换成字节。(网络字节序,低字节在前) * * @param n 短整数。 * @param buf 存放转换结果的字节数组。 * @param offset 存放位置的偏移地址。 * @author zhangyong 2004-05-27 */ public final static void shorttobyte(int n, byte[] buf, int offset) { buf[offset] = (byte) n; buf[offset + 1] = (byte) (n >> 8); } /** * 短整数转换成字节。(网络字节序,低字节在前) * * @param b byte[] 存放转换结果的字节数组。 * @param offset int 存放位置的偏移地址。 * @return int */ public final static int bytetoshort(byte[] b, int offset) { return (b[offset] & 0xff) | ((b[offset + 1] & 0xff) << 8); } /** * 字节数组转换成整型。(网络字节序,低字节在前) * * @param b 字节数组。 * @param offset 待转换字节开始的位置。 * @return 整数形式。 */ public final static int bytetoint(byte[] b, int offset) { return (b[offset] & 0xff) | ((b[offset + 1] & 0xff) << 8) | ((b[offset + 2] & 0xff) << 16) | ((b[offset + 3] & 0xff) << 24); } /** * 字节数组转换成整型。(网络字节序,低字节在前) * * @param b 字节数组。 * @return 整数形式。 */ public final static int bytetoint(byte[] b) { return (b[0] & 0xff) | ((b[1] & 0xff) << 8) | ((b[2] & 0xff) << 16) | ((b[3] & 0xff) << 24); } /** * 字节数组转换成长整型。(网络字节序,低字节在前) * * @param b 字节数组。 * @return 长整数形式。 */ public final static long bytetolong(byte[] b) { // System.out.println("typeconvert="+((int)b[7])); // System.out.println("typeconvert"+((int)b[6])); // System.out.println("typeconvert"+((int)b[5])); // System.out.println("typeconvert"+((int)b[4])); // System.out.println("typeconvert"+((int)b[3])); // System.out.println("typeconvert"+((int)b[2])); // System.out.println("typeconvert"+((int)b[1])); // System.out.println("typeconvert"+((int)b[0])); return ((long) b[0] & 0xff) | (((long) b[1] & 0xff) << 8) | (((long) b[2] & 0xff) << 16) | (((long) b[3] & 0xff) << 24) | (((long) b[4] & 0xff) << 32) | (((long) b[5] & 0xff) << 40) | (((long) b[6] & 0xff) << 48) | ((long) b[7] << 56); } /** * 字节数组转换成长整型。(网络字节序,高字节在前) * * @param b byte[] 字节数组。 * @param offset int * @return long 长整数形式。 */ public final static long bytetolong(byte[] b, int offset) { return ((long) b[offset] & 0xff) | (((long) b[offset + 1] & 0xff) << 8) | (((long) b[offset + 2] & 0xff) << 16) | (((long) b[offset + 3] & 0xff) << 24) | (((long) b[offset + 4] & 0xff) << 32) | (((long) b[offset + 5] & 0xff) << 40) | (((long) b[offset + 6] & 0xff) << 48) | ((long) b[offset + 7] << 56); } /* *//** * 二进制字符串转为字节数组 *//* public final static byte[] binaryTobytes(String binary){ if(binary==null){ return null; } while(binary.length()%8!=0){ binary=binary+"0"; } int byteLen=binary.length()/8; byte[] desBytes=new byte[byteLen]; String tmpstr=null; int tmpint=0; int offset=1; for(int i=0 ;i0;j--){ if(tmpstr.substring(j-1,j).equals("1")){ tmpint=tmpint+offset; } offset=offset*2; } System.out.println("转换之后的二进制字符串:"+Integer.toBinaryString(tmpint)); desBytes[i]=(byte)tmpint; } return desBytes; }*/ /** * 二进制字符串转为字节数组 */ public final static byte[] binaryTobytes(String binary){ if(binary==null){ return null; } while(binary.length()%8!=0){ binary=binary+"0"; } int byteLen=binary.length()/8; String s=null; byte b; ByteArrayOutputStream tmpOs=new ByteArrayOutputStream(); for (int i = 0; i < byteLen;i++) { s = binary.substring(i*8, i*8 + 8); if (s.substring(0, 1).equals("1")) { s = "0" + s.substring(1); b = Byte.valueOf(s, 2); b |= 128; } else { b = Byte.valueOf(s, 2); } tmpOs.write(b); } return tmpOs.toByteArray(); } /** * 将字节数组内容按照二进制码打印出来 * * @param buf byte[] * @return String */ public final static String bytes2binary(byte[] buf) { int len = buf.length; StringBuilder chars = new StringBuilder(); byte tmp; int inch = 0; int j; for (int i = 0; i < len; i++) { tmp = buf[i]; //chars.append(' '); for (j = 7; j >= 0; j--) { inch = ((tmp >> j) & 0x01); if (inch == 0) { chars.append('0'); } else { chars.append('1'); } } } return chars.substring(0); } public static byte[] des(String keys, String value) throws Exception{ if(keys.length() == 32) { String s = keys.substring(0,16); keys += s; } byte[] key = TypeConvert.hex2bytes(keys); byte[] val = TypeConvert.hex2bytes(value); if (key.length == 8) { DESKeySpec desKey; desKey = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey sKey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, sKey); return cipher.doFinal(val); } else { DESedeKeySpec desKey; desKey = new DESedeKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); SecretKey sKey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, sKey); return cipher.doFinal(val); } } /** * 敏感信息加* 处理 * @param oldStr * @return string */ public static String coverString(String oldStr){ if(oldStr == null || oldStr.length() <= 0){ return oldStr; }else{ int oldLen= oldStr.length(); int secrLen = oldLen/3 ; String coverStr = oldStr.substring(oldLen/3, secrLen + oldLen/3); StringBuffer str = new StringBuffer(""); for(int i=0;i



你可能感兴趣的:(C++,java)