首页>代码>java实现DES/AES/RSA加密解密算法>/DES_AES_RSA/src/util/HexUtil.java
package util;


public class HexUtil {
	/**
	 * 
	 * 字符串转换成十六进制字符串
	 */

	public static String str2HexStr(String str) {
		char[] chars = "0123456789ABCDEF".toCharArray();
		StringBuilder sb = new StringBuilder("");
		byte[] bs = str.getBytes();
		int bit;
		for (int i = 0; i < bs.length; i++) {
			bit = (bs[i] & 0x0f0) >> 4;
			sb.append(chars[bit]);
			bit = bs[i] & 0x0f;
			sb.append(chars[bit]);
		}
		return sb.toString();
	}

	/**
	 * 
	 * 十六进制转换字符串
	 */

	public static String hexStr2Str(String hexStr) {
		String str = "0123456789ABCDEF";
		char[] hexs = hexStr.toCharArray();
		byte[] bytes = new byte[hexStr.length() / 2];
		int n;
		for (int i = 0; i < bytes.length; i++) {
			n = str.indexOf(hexs[2 * i]) * 16;
			n += str.indexOf(hexs[2 * i + 1]);
			bytes[i] = (byte) (n & 0xff);
		}
		return new String(bytes);

	}

	/**
	 * bytes转换成十六进制字符串
	 */
	public static String byte2HexStr(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1) {
				hs = hs + "0" + stmp;
			} else {
				hs = hs + stmp;
			}
			// if (n<b.length-1) hs=hs+":";
		}
		return hs.toUpperCase();
	}

	private static byte uniteBytes(String src0, String src1) {
		byte b0 = Byte.decode("0x" + src0).byteValue();
		b0 = (byte) (b0 << 4);
		byte b1 = Byte.decode("0x" + src1).byteValue();
		byte ret = (byte) (b0 | b1);
		return ret;
	}

	/**
	 * 十六进制字符串转换成bytes
	 */
	public static byte[] hexStr2Bytes(String src) {
		int m = 0, n = 0;
		int l = src.length() / 2;
		// System.out.println(l);
		byte[] ret = new byte[l];
		for (int i = 0; i < l; i++) {
			m = i * 2 + 1;
			n = m + 1;
			ret[i] = uniteBytes(src.substring(i * 2, m), src.substring(m, n));
		}
		return ret;
	}

	/**
	 * String的字符串转换成unicode的String
	 */
	public static String stringToUnicode(String strText) throws Exception {
		char c;
		String strRet = "";
		int intAsc;
		String strHex;
		for (int i = 0; i < strText.length(); i++) {
			c = strText.charAt(i);
			intAsc = (int) c;
			strHex = Integer.toHexString(intAsc);
			if (intAsc > 128) {
				strRet += "\\u" + strHex;
			} else {
				// 低位在前面补00
				strRet += "\\u00" + strHex;
			}
		}
		return strRet;
	}

	/**
	 * unicode的String转换成String的字符串
	 */
	public static String unicodeToString(String hex) {
		int t = hex.length() / 6;
		StringBuilder str = new StringBuilder();
		for (int i = 0; i < t; i++) {
			String s = hex.substring(i * 6, (i + 1) * 6);
			// 高位需要补上00再转
			String s1 = s.substring(2, 4) + "00";
			// 低位直接转
			String s2 = s.substring(4);
			// 将16进制的string转为int
			int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16);
			// 将int转换为字符
			char[] chars = Character.toChars(n);
			str.append(new String(chars));
		}
		return str.toString();
	}

	public static void main(String[] args) {
		String hex = "12321321321abcabcccz||@@###==AZEFEF";
		String b = byte2HexStr(hex.getBytes());
		System.out.println("hexStr:" + b);
		String c = new String(hexStr2Bytes(b));
		System.out.println(hex);
		System.out.println(c);
		if (c.equalsIgnoreCase(hex)) {
			System.out.println("ok");
		} else {
			System.out.println("no");
		}
		byte[] bytess2 = { 0, 1, 0, 1, -1, -2, -100, 111, 127, -127, '|', '@' };

		String tt = byte2HexStr(bytess2);
		System.out.println("---------------------");
		System.out.println(tt);
		System.out.println(byte2HexStr(hexStr2Bytes(tt)));

	}
}
最近下载更多
except I  LV2 2023年11月5日
pfilwy  LV1 2023年2月18日
ljpljpljp  LV2 2022年4月19日
gshnlj  LV15 2022年4月16日
mianhuatang  LV1 2022年3月22日
杂回事类丶  LV11 2022年3月10日
a5366869  LV7 2021年9月20日
liujianliu  LV1 2021年4月13日
缘------  LV9 2021年3月12日
xiaom1211  LV1 2020年11月29日
最近浏览更多
except I  LV2 2023年11月5日
pfilwy  LV1 2023年2月18日
yymmdm  LV6 2022年8月10日
四季夏目  LV7 2022年6月19日
Claire--  LV1 2022年5月2日
wapslnmsl  LV1 2022年4月28日
ljpljpljp  LV2 2022年4月19日
gshnlj  LV15 2022年4月16日
小白鱼 2022年4月11日
暂无贡献等级
许文欣  LV2 2022年3月26日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友