字符串转十六进制与十六进制转字符串示例

package stringtohex;
/**
 * java中使用16位(2个字节)的Unicode字符集编码作为字符编码格式。
 * char类型的值也可直接作为整数类型的值来使用,但它是一个16位的无符号整数,即全部是正数,范围是0-65535
 * 如果把0-65535内的一个int整数赋给char类型变量,系统会把这个int整数当成char类型变量
 * @author AbuGe
 *
 */
public class StringToHexDemo 
{
	private static String hexString = "0123456789ABCDEF";
	public static void main(String[] args)
	{
		String s = "ab";
		//将字符串转换成字节数组
		byte[] b = s.getBytes();
		StringBuilder sb = new StringBuilder(b.length * 2);
		//将字节数组中的每个字节拆分成两个16进制数
		for(int i = 0; i < b.length; i++)
		{
			sb.append(hexString.charAt((b[i] & 0xf0) >> 4));
			sb.append(hexString.charAt((b[i] & 0x0f) >> 0));
		}
		String hexStr = sb.toString();
		//注意一个char字符型占两个字节
		byte[] c = convert2HexArray(s);
		for(int i = 0; i < c.length; i++)
		System.out.println(c[i]);
		
	}
	//字符串转化为十六进制表示,字符串只能是01234567890abcdef,否则会抛出java.lang.NumberFormatException
	  private static byte[] convert2HexArray(String apdu) 
	    {
	          int len = apdu.length() / 2;
	  	      char[] chars = apdu.toCharArray();
	  	      String[] hexes = new String[len];
	  	      byte[] bytes = new byte[len];
	  	      for (int i = 0, j = 0; j < len; i = i + 2, j++)
	  	      {
	  	          hexes[j] =""+chars[i]+chars[i+1];//两个字符组成一个字节
	  	          bytes[j] = (byte)Integer.parseInt(hexes[j],16);
	  	      }
	  	      return bytes;
	      }
	//十六进制转化为字符串
	  public static String byte2hex(byte[] b) 
	    { //一个字节的数, 转成16进制字符串
	        String hs = "";
	        String tmp = "";
	        for (int n = 0; n < b.length; n++) 
	        {
	            //整数转成十六进制表示
	            tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
	            if (tmp.length() == 1) 
	            {
	                hs = hs + "0" + tmp;
	            } else {
	                hs = hs + tmp;
	            }
	        }
	        tmp = null;
	        return hs.toUpperCase(); //转成大写
	    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章